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.sql76
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);