diff --git a/doc/src/sgml/event-trigger.sgml b/doc/src/sgml/event-trigger.sgml
index 04353eac3d7..f151eb73754 100644
--- a/doc/src/sgml/event-trigger.sgml
+++ b/doc/src/sgml/event-trigger.sgml
@@ -68,12 +68,11 @@
The table_rewrite> event occurs just before a table is
- rewritten by the command ALTER TABLE. While other
+ rewritten by some actions of the commands ALTER TABLE> and
+ ALTER TYPE>. While other
control statements are available to rewrite a table,
like CLUSTER and VACUUM,
- the table_rewrite> event is currently only triggered by
- the ALTER TABLE command, and only when that command
- attempts to rewrite the table.
+ the table_rewrite> event is not triggered by them.
@@ -318,7 +317,7 @@
X
X
-
- -
+ X
diff --git a/src/backend/commands/event_trigger.c b/src/backend/commands/event_trigger.c
index dcf5b987477..deeb8dcfaf1 100644
--- a/src/backend/commands/event_trigger.c
+++ b/src/backend/commands/event_trigger.c
@@ -326,7 +326,8 @@ validate_table_rewrite_tags(const char *filtervar, List *taglist)
static event_trigger_command_tag_check_result
check_table_rewrite_ddl_tag(const char *tag)
{
- if (pg_strcasecmp(tag, "ALTER TABLE") == 0)
+ if (pg_strcasecmp(tag, "ALTER TABLE") == 0 ||
+ pg_strcasecmp(tag, "ALTER TYPE") == 0)
return EVENT_TRIGGER_COMMAND_TAG_OK;
return EVENT_TRIGGER_COMMAND_TAG_NOT_SUPPORTED;
diff --git a/src/test/regress/expected/event_trigger.out b/src/test/regress/expected/event_trigger.out
index 20957945766..8462fbff1c1 100644
--- a/src/test/regress/expected/event_trigger.out
+++ b/src/test/regress/expected/event_trigger.out
@@ -370,6 +370,17 @@ alter table rewriteme
NOTICE: Table 'rewriteme' is being rewritten (reason = 6)
-- shouldn't trigger a table_rewrite event
alter table rewriteme alter column foo type numeric(12,4);
+-- typed tables are rewritten when their type changes
+create type rewritetype as (a int);
+create table rewritemetoo1 of rewritetype;
+create table rewritemetoo2 of rewritetype;
+alter type rewritetype alter attribute a type text cascade;
+NOTICE: Table 'rewritemetoo1' is being rewritten (reason = 4)
+NOTICE: Table 'rewritemetoo2' is being rewritten (reason = 4)
+-- but this doesn't work
+create table rewritemetoo3 (a rewritetype);
+alter type rewritetype alter attribute a type varchar cascade;
+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();
diff --git a/src/test/regress/sql/event_trigger.sql b/src/test/regress/sql/event_trigger.sql
index c6e47ed856e..4baad80b1df 100644
--- a/src/test/regress/sql/event_trigger.sql
+++ b/src/test/regress/sql/event_trigger.sql
@@ -276,6 +276,16 @@ alter table rewriteme
-- shouldn't trigger a table_rewrite event
alter table rewriteme alter column foo type numeric(12,4);
+-- typed tables are rewritten when their type changes
+create type rewritetype as (a int);
+create table rewritemetoo1 of rewritetype;
+create table rewritemetoo2 of rewritetype;
+alter type rewritetype alter attribute a type text cascade;
+
+-- but this doesn't work
+create table rewritemetoo3 (a rewritetype);
+alter type rewritetype alter attribute a type varchar cascade;
+
drop table rewriteme;
drop event trigger no_rewrite_allowed;
drop function test_evtrig_no_rewrite();