diff options
| author | Michael Paquier | 2023-12-04 00:53:49 +0000 |
|---|---|---|
| committer | Michael Paquier | 2023-12-04 00:53:49 +0000 |
| commit | f21848de20130146bc8039504af40bd24add54cd (patch) | |
| tree | b2c95265c2ee21f151e0d5a38778adef649d451b /src/test | |
| parent | d78b6cbb602f5c36db3e267e2713b3aa22c815a5 (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.out | 52 | ||||
| -rw-r--r-- | src/test/regress/sql/event_trigger.sql | 45 |
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); |
