summaryrefslogtreecommitdiff
path: root/src/exchangedb/0003-purse_deletion.sql
diff options
context:
space:
mode:
Diffstat (limited to 'src/exchangedb/0003-purse_deletion.sql')
-rw-r--r--src/exchangedb/0003-purse_deletion.sql88
1 files changed, 15 insertions, 73 deletions
diff --git a/src/exchangedb/0003-purse_deletion.sql b/src/exchangedb/0003-purse_deletion.sql
index 69db4293c..66a95ff03 100644
--- a/src/exchangedb/0003-purse_deletion.sql
+++ b/src/exchangedb/0003-purse_deletion.sql
@@ -1,6 +1,6 @@
--
-- This file is part of TALER
--- Copyright (C) 2014--2022 Taler Systems SA
+-- Copyright (C) 2024 Taler Systems SA
--
-- TALER is free software; you can redistribute it and/or modify it under the
-- terms of the GNU General Public License as published by the Free Software
@@ -14,77 +14,29 @@
-- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
--
-CREATE OR REPLACE FUNCTION create_table_purse_deletion(
- IN partition_suffix VARCHAR DEFAULT NULL
-)
-RETURNS VOID
-LANGUAGE plpgsql
-AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'purse_deletion';
-BEGIN
- PERFORM create_partitioned_table(
- 'CREATE TABLE IF NOT EXISTS %I'
- '(purse_deletion_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY'
- ',purse_sig BYTEA CHECK (LENGTH(purse_sig)=64)'
- ',purse_pub BYTEA NOT NULL CHECK (LENGTH(purse_pub)=32)'
- ') %s ;'
- ,table_name
- ,'PARTITION BY HASH (purse_pub)'
- ,partition_suffix
- );
- PERFORM comment_partitioned_table(
- 'signatures affirming explicit purse deletions'
- ,table_name
- ,partition_suffix
- );
- PERFORM comment_partitioned_column(
- 'signature of type WALLET_PURSE_DELETE'
- ,'purse_sig'
- ,table_name
- ,partition_suffix
- );
-END $$;
-
-COMMENT ON FUNCTION create_table_purse_deletion
- IS 'Creates the purse_deletion table';
+-- Adds a 'unique' constraint to the 'purse_pub'.
+-- This is not only semantically correct, but also
+-- creates a dramatic speed-up on the
+-- pg_select_purse query (which otherwise fails to
+-- use indices correctly).
-
-CREATE OR REPLACE FUNCTION constrain_table_purse_deletion(
- IN partition_suffix VARCHAR DEFAULT NULL
+CREATE FUNCTION constrain_table_purse_decision3(
+ IN partition_suffix TEXT
)
-RETURNS void
+RETURNS VOID
LANGUAGE plpgsql
AS $$
DECLARE
- table_name VARCHAR DEFAULT 'purse_deletion';
+ table_name TEXT DEFAULT 'purse_decision';
BEGIN
table_name = concat_ws('_', table_name, partition_suffix);
EXECUTE FORMAT (
'ALTER TABLE ' || table_name ||
- ' ADD CONSTRAINT ' || table_name || '_delete_serial_key '
- 'UNIQUE (purse_deletion_serial_id)'
- );
-END $$;
-
-
-CREATE OR REPLACE FUNCTION master_table_purse_requests_was_deleted (
-)
-RETURNS void
-LANGUAGE plpgsql
-AS $$
-DECLARE
- table_name VARCHAR DEFAULT 'purse_requests';
-BEGIN
- EXECUTE FORMAT (
- 'ALTER TABLE exchange.' || table_name ||
- ' ADD COLUMN'
- ' was_deleted BOOLEAN NOT NULL DEFAULT(FALSE)'
+ ' ADD CONSTRAINT ' || table_name || '_purse_decision_purse_pub'
+ ' UNIQUE (purse_pub) '
);
- COMMENT ON COLUMN purse_requests.was_deleted
- IS 'TRUE if the purse was explicitly deleted (purse must have an entry in the purse_deletion table)';
-END $$;
-
+END
+$$;
INSERT INTO exchange_tables
(name
@@ -93,18 +45,8 @@ INSERT INTO exchange_tables
,partitioned
,by_range)
VALUES
- ('purse_deletion'
- ,'exchange-0003'
- ,'create'
- ,TRUE
- ,FALSE),
- ('purse_deletion'
+ ('purse_decision3'
,'exchange-0003'
,'constrain'
,TRUE
- ,FALSE),
- ('purse_requests_was_deleted'
- ,'exchange-0003'
- ,'master'
- ,TRUE
,FALSE);