summaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorMichael Paquier2023-12-04 00:53:49 +0000
committerMichael Paquier2023-12-04 00:53:49 +0000
commitf21848de20130146bc8039504af40bd24add54cd (patch)
treeb2c95265c2ee21f151e0d5a38778adef649d451b /src/test
parentd78b6cbb602f5c36db3e267e2713b3aa22c815a5 (diff)
Add support for REINDEX in event triggers
This commit adds support for REINDEX in event triggers, making this command react for the events ddl_command_start and ddl_command_end. The indexes rebuilt are collected with the ReindexStmt emitted by the caller, for the concurrent and non-concurrent paths. Thanks to that, it is possible to know a full list of the indexes that a single REINDEX command has worked on. Author: Garrett Thornburg, Jian He Reviewed-by: Jim Jones, Michael Paquier Discussion: https://postgr.es/m/CAEEqfk5bm32G7sbhzHbES9WejD8O8DCEOaLkxoBP7HNWxjPpvg@mail.gmail.com
Diffstat (limited to 'src/test')
-rw-r--r--src/test/regress/expected/event_trigger.out52
-rw-r--r--src/test/regress/sql/event_trigger.sql45
2 files changed, 97 insertions, 0 deletions
diff --git a/src/test/regress/expected/event_trigger.out b/src/test/regress/expected/event_trigger.out
index 0b87a42d0a9..fdcd1279459 100644
--- a/src/test/regress/expected/event_trigger.out
+++ b/src/test/regress/expected/event_trigger.out
@@ -556,6 +556,58 @@ ERROR: cannot alter type "rewritetype" because column "rewritemetoo3.a" uses it
drop table rewriteme;
drop event trigger no_rewrite_allowed;
drop function test_evtrig_no_rewrite();
+-- Tests for REINDEX
+CREATE OR REPLACE FUNCTION reindex_start_command()
+RETURNS event_trigger AS $$
+BEGIN
+ RAISE NOTICE 'REINDEX START: % %', tg_event, tg_tag;
+END;
+$$ LANGUAGE plpgsql;
+CREATE EVENT TRIGGER regress_reindex_start ON ddl_command_start
+ WHEN TAG IN ('REINDEX')
+ EXECUTE PROCEDURE reindex_start_command();
+CREATE FUNCTION reindex_end_command()
+RETURNS event_trigger AS $$
+DECLARE
+ obj record;
+BEGIN
+ FOR obj IN SELECT * FROM pg_event_trigger_ddl_commands()
+ LOOP
+ RAISE NOTICE 'REINDEX END: command_tag=% type=% identity=%',
+ obj.command_tag, obj.object_type, obj.object_identity;
+ END LOOP;
+END;
+$$ LANGUAGE plpgsql;
+CREATE EVENT TRIGGER regress_reindex_end ON ddl_command_end
+ WHEN TAG IN ('REINDEX')
+ EXECUTE PROCEDURE reindex_end_command();
+CREATE TABLE concur_reindex_tab (c1 int);
+CREATE INDEX concur_reindex_ind ON concur_reindex_tab (c1);
+-- Both start and end triggers enabled.
+REINDEX INDEX concur_reindex_ind;
+NOTICE: REINDEX START: ddl_command_start REINDEX
+NOTICE: REINDEX END: command_tag=REINDEX type=index identity=public.concur_reindex_ind
+REINDEX TABLE concur_reindex_tab;
+NOTICE: REINDEX START: ddl_command_start REINDEX
+NOTICE: REINDEX END: command_tag=REINDEX type=index identity=public.concur_reindex_ind
+REINDEX INDEX CONCURRENTLY concur_reindex_ind;
+NOTICE: REINDEX START: ddl_command_start REINDEX
+NOTICE: REINDEX END: command_tag=REINDEX type=index identity=public.concur_reindex_ind
+REINDEX TABLE CONCURRENTLY concur_reindex_tab;
+NOTICE: REINDEX START: ddl_command_start REINDEX
+NOTICE: REINDEX END: command_tag=REINDEX type=index identity=public.concur_reindex_ind
+-- with start trigger disabled.
+ALTER EVENT TRIGGER regress_reindex_start DISABLE;
+REINDEX INDEX concur_reindex_ind;
+NOTICE: REINDEX END: command_tag=REINDEX type=index identity=public.concur_reindex_ind
+REINDEX INDEX CONCURRENTLY concur_reindex_ind;
+NOTICE: REINDEX END: command_tag=REINDEX type=index identity=public.concur_reindex_ind
+-- Clean up
+DROP EVENT TRIGGER regress_reindex_start;
+DROP EVENT TRIGGER regress_reindex_end;
+DROP FUNCTION reindex_end_command();
+DROP FUNCTION reindex_start_command();
+DROP TABLE concur_reindex_tab;
-- test Row Security Event Trigger
RESET SESSION AUTHORIZATION;
CREATE TABLE event_trigger_test (a integer, b text);
diff --git a/src/test/regress/sql/event_trigger.sql b/src/test/regress/sql/event_trigger.sql
index 6f0933b9e88..e5c8bf84122 100644
--- a/src/test/regress/sql/event_trigger.sql
+++ b/src/test/regress/sql/event_trigger.sql
@@ -418,6 +418,51 @@ drop table rewriteme;
drop event trigger no_rewrite_allowed;
drop function test_evtrig_no_rewrite();
+-- Tests for REINDEX
+CREATE OR REPLACE FUNCTION reindex_start_command()
+RETURNS event_trigger AS $$
+BEGIN
+ RAISE NOTICE 'REINDEX START: % %', tg_event, tg_tag;
+END;
+$$ LANGUAGE plpgsql;
+CREATE EVENT TRIGGER regress_reindex_start ON ddl_command_start
+ WHEN TAG IN ('REINDEX')
+ EXECUTE PROCEDURE reindex_start_command();
+CREATE FUNCTION reindex_end_command()
+RETURNS event_trigger AS $$
+DECLARE
+ obj record;
+BEGIN
+ FOR obj IN SELECT * FROM pg_event_trigger_ddl_commands()
+ LOOP
+ RAISE NOTICE 'REINDEX END: command_tag=% type=% identity=%',
+ obj.command_tag, obj.object_type, obj.object_identity;
+ END LOOP;
+END;
+$$ LANGUAGE plpgsql;
+CREATE EVENT TRIGGER regress_reindex_end ON ddl_command_end
+ WHEN TAG IN ('REINDEX')
+ EXECUTE PROCEDURE reindex_end_command();
+
+CREATE TABLE concur_reindex_tab (c1 int);
+CREATE INDEX concur_reindex_ind ON concur_reindex_tab (c1);
+-- Both start and end triggers enabled.
+REINDEX INDEX concur_reindex_ind;
+REINDEX TABLE concur_reindex_tab;
+REINDEX INDEX CONCURRENTLY concur_reindex_ind;
+REINDEX TABLE CONCURRENTLY concur_reindex_tab;
+-- with start trigger disabled.
+ALTER EVENT TRIGGER regress_reindex_start DISABLE;
+REINDEX INDEX concur_reindex_ind;
+REINDEX INDEX CONCURRENTLY concur_reindex_ind;
+
+-- Clean up
+DROP EVENT TRIGGER regress_reindex_start;
+DROP EVENT TRIGGER regress_reindex_end;
+DROP FUNCTION reindex_end_command();
+DROP FUNCTION reindex_start_command();
+DROP TABLE concur_reindex_tab;
+
-- test Row Security Event Trigger
RESET SESSION AUTHORIZATION;
CREATE TABLE event_trigger_test (a integer, b text);