diff options
Diffstat (limited to 'src/exchangedb/0003-purse_deletion.sql')
-rw-r--r-- | src/exchangedb/0003-purse_deletion.sql | 88 |
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); |