From 405992de555a67ef91bc1c0f84e782c091bb00dd Mon Sep 17 00:00:00 2001 From: Onder Kalaci Date: Tue, 9 Aug 2022 14:28:14 +0200 Subject: [PATCH] Allow MATERIALIZED VIEW Rewrite when event triggers exists It looks like we forgot to allow table rewrite on PG_CMDTAG. This commit fixes that. --- src/include/tcop/cmdtaglist.h | 2 +- src/test/regress/expected/create_am.out | 13 +++++++++++++ src/test/regress/sql/create_am.sql | 15 +++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/include/tcop/cmdtaglist.h b/src/include/tcop/cmdtaglist.h index 2b1163ce33..9e94f44c5f 100644 --- a/src/include/tcop/cmdtaglist.h +++ b/src/include/tcop/cmdtaglist.h @@ -42,7 +42,7 @@ PG_CMDTAG(CMDTAG_ALTER_FUNCTION, "ALTER FUNCTION", true, false, false) PG_CMDTAG(CMDTAG_ALTER_INDEX, "ALTER INDEX", true, false, false) PG_CMDTAG(CMDTAG_ALTER_LANGUAGE, "ALTER LANGUAGE", true, false, false) PG_CMDTAG(CMDTAG_ALTER_LARGE_OBJECT, "ALTER LARGE OBJECT", true, false, false) -PG_CMDTAG(CMDTAG_ALTER_MATERIALIZED_VIEW, "ALTER MATERIALIZED VIEW", true, false, false) +PG_CMDTAG(CMDTAG_ALTER_MATERIALIZED_VIEW, "ALTER MATERIALIZED VIEW", true, true, false) PG_CMDTAG(CMDTAG_ALTER_OPERATOR, "ALTER OPERATOR", true, false, false) PG_CMDTAG(CMDTAG_ALTER_OPERATOR_CLASS, "ALTER OPERATOR CLASS", true, false, false) PG_CMDTAG(CMDTAG_ALTER_OPERATOR_FAMILY, "ALTER OPERATOR FAMILY", true, false, false) diff --git a/src/test/regress/expected/create_am.out b/src/test/regress/expected/create_am.out index e9a9283d7a..c292d4b4c0 100644 --- a/src/test/regress/expected/create_am.out +++ b/src/test/regress/expected/create_am.out @@ -271,6 +271,19 @@ SELECT amname FROM pg_class c, pg_am am heap2 (1 row) +-- ALTER MATERIALIZED VIEW should work with event triggers as well +CREATE OR REPLACE FUNCTION empty_event_trigger() + RETURNS event_trigger AS $$ +DECLARE +BEGIN +END; +$$ LANGUAGE plpgsql; +CREATE EVENT TRIGGER empty_triggger ON sql_drop EXECUTE PROCEDURE empty_event_trigger(); +ALTER MATERIALIZED VIEW heapmv SET ACCESS METHOD heap; +ALTER MATERIALIZED VIEW heapmv SET ACCESS METHOD heap2; +-- cleanup the trigger +DROP FUNCTION empty_event_trigger() CASCADE; +NOTICE: drop cascades to event trigger empty_triggger SELECT COUNT(a), COUNT(1) FILTER(WHERE a=1) FROM heapmv; count | count -------+------- diff --git a/src/test/regress/sql/create_am.sql b/src/test/regress/sql/create_am.sql index 256884c959..ebed6a20f9 100644 --- a/src/test/regress/sql/create_am.sql +++ b/src/test/regress/sql/create_am.sql @@ -177,6 +177,21 @@ SELECT amname FROM pg_class c, pg_am am ALTER MATERIALIZED VIEW heapmv SET ACCESS METHOD heap2; SELECT amname FROM pg_class c, pg_am am WHERE c.relam = am.oid AND c.oid = 'heapmv'::regclass; + +-- ALTER MATERIALIZED VIEW should work with event triggers as well +CREATE OR REPLACE FUNCTION empty_event_trigger() + RETURNS event_trigger AS $$ +DECLARE +BEGIN +END; +$$ LANGUAGE plpgsql; +CREATE EVENT TRIGGER empty_triggger ON sql_drop EXECUTE PROCEDURE empty_event_trigger(); +ALTER MATERIALIZED VIEW heapmv SET ACCESS METHOD heap; +ALTER MATERIALIZED VIEW heapmv SET ACCESS METHOD heap2; + +-- cleanup the trigger +DROP FUNCTION empty_event_trigger() CASCADE; + SELECT COUNT(a), COUNT(1) FILTER(WHERE a=1) FROM heapmv; -- No support for multiple subcommands ALTER TABLE heaptable SET ACCESS METHOD heap, SET ACCESS METHOD heap2; -- 2.34.1