diff options
Diffstat (limited to 'src/exchangedb/0003-purse_deletion.sql')
-rw-r--r-- | src/exchangedb/0003-purse_deletion.sql | 76 |
1 files changed, 17 insertions, 59 deletions
diff --git a/src/exchangedb/0003-purse_deletion.sql b/src/exchangedb/0003-purse_deletion.sql index e655ee613..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,58 +14,26 @@ -- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/> -- -CREATE OR REPLACE FUNCTION create_table_purse_deletion( - IN shard_suffix VARCHAR DEFAULT NULL -) -RETURNS VOID -LANGUAGE plpgsql -AS $$ -BEGIN - PERFORM create_partitioned_table( - 'CREATE TABLE IF NOT EXISTS %I' - '(purse_deletion_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' -- UNIQUE' - ',purse_sig BYTEA CHECK (LENGTH(purse_sig)=64)' - ',XXX VARCHAR NOT NULL' - ') %s ;' - ,'purse_deletion' - ,'PARTITION BY HASH (XXX)' - ,shard_suffix - ); - COMMENT ON TABLE purse_deletion - IS 'signatures affirming explicit purse deletions'; - COMMENT ON COLUMN purse_deletion.purse_sig - IS 'signature of type XXX'; -END -$$; -COMMENT ON FUNCTION create_table_purse_deletion - IS 'Creates the purse_deletion table'; - -CREATE OR REPLACE FUNCTION constrain_table_purse_deletion( - IN partition_suffix VARCHAR -) -RETURNS void -LANGUAGE plpgsql -AS $$ -BEGIN - EXECUTE FORMAT ( - 'ALTER TABLE purse_deletion_' || partition_suffix || ' ' - 'ADD CONSTRAINT purse_deletion_' || partition_suffix || '_XXX ' - 'UNIQUE (XXX)' - ); -END -$$; +-- 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 alter_create_was_deleted_table_purse_requests ( - IN partition_suffix VARCHAR +CREATE FUNCTION constrain_table_purse_decision3( + IN partition_suffix TEXT ) -RETURNS void +RETURNS VOID LANGUAGE plpgsql AS $$ +DECLARE + table_name TEXT DEFAULT 'purse_decision'; BEGIN + table_name = concat_ws('_', table_name, partition_suffix); EXECUTE FORMAT ( - 'ALTER TABLE purse_requests_' || partition_suffix || - ' ADD COLUMN' - ' was_deleted BOOLEAN NOT NULL DEFAULT(FALSE)' + 'ALTER TABLE ' || table_name || + ' ADD CONSTRAINT ' || table_name || '_purse_decision_purse_pub' + ' UNIQUE (purse_pub) ' ); END $$; @@ -77,18 +45,8 @@ INSERT INTO exchange_tables ,partitioned ,by_range) VALUES - ('purse_deletion' - ,'exchange-0002' - ,'create' - ,TRUE - ,FALSE), - ('purse_deletion' - ,'exchange-0002' + ('purse_decision3' + ,'exchange-0003' ,'constrain' ,TRUE - ,FALSE), - ('purse_requests' - ,'exchange-0002' - ,'alter_create_was_deleted' - ,TRUE ,FALSE); |