diff options
author | Peter Eisentraut <peter@eisentraut.org> | 2024-11-06 13:42:27 +0100 |
---|---|---|
committer | Peter Eisentraut <peter@eisentraut.org> | 2024-11-06 13:43:17 +0100 |
commit | a0be94067e76c81a2bbba6a98b584b870024e363 (patch) | |
tree | 828a7c923fd7f1b2c367edd963af6e59763852e1 | |
parent | 9044fc1d45a0212fd123bd8f364eac058f60fed7 (diff) | |
download | postgresql-a0be94067e76c81a2bbba6a98b584b870024e363.tar.gz postgresql-a0be94067e76c81a2bbba6a98b584b870024e363.zip |
doc: Remove event trigger firing matrix
This is difficult to maintain accurately, and it was probably already
somewhat incorrect, especially in the sql_drop and table_rewrite
categories.
The prior section already documented which DDL commands are *not*
supported (which was also slightly outdated), so let's expand that a
bit and just rely on that instead of listing out each command in full
detail.
Reviewed-by: Daniel Gustafsson <daniel@yesql.se>
Reviewed-by: Michael Paquier <michael@paquier.xyz>
Reviewed-by: Jian He <jian.universality@gmail.com>
Discussion: https://www.postgresql.org/message-id/flat/CACJufxE_UAuxcM08BW5oVsg34v0cFWoEt8yBa5xSAoKLmL6LTQ%40mail.gmail.com
-rw-r--r-- | doc/src/sgml/event-trigger.sgml | 1028 | ||||
-rw-r--r-- | src/backend/commands/event_trigger.c | 4 | ||||
-rw-r--r-- | src/backend/tcop/utility.c | 3 |
3 files changed, 81 insertions, 954 deletions
diff --git a/doc/src/sgml/event-trigger.sgml b/doc/src/sgml/event-trigger.sgml index cfa7b3d1b2d..1bd9abb6676 100644 --- a/doc/src/sgml/event-trigger.sgml +++ b/doc/src/sgml/event-trigger.sgml @@ -26,7 +26,7 @@ <para> An event trigger fires whenever the event with which it is associated - occurs in the database in which it is defined. Currently, the only + occurs in the database in which it is defined. Currently, the supported events are <literal>login</literal>, <literal>ddl_command_start</literal>, @@ -36,6 +36,9 @@ Support for additional events may be added in future releases. </para> + <sect2 id="event-trigger-login"> + <title>login</title> + <para> The <literal>login</literal> event occurs when an authenticated user logs into the system. Any bug in a trigger procedure for this event may @@ -58,26 +61,58 @@ For an example on how to use the <literal>login</literal> event trigger, see <xref linkend="event-trigger-database-login-example"/>. </para> + </sect2> + + <sect2 id="event-trigger-ddl_command_start"> + <title>ddl_command_start</title> <para> The <literal>ddl_command_start</literal> event occurs just before the - execution of a <literal>CREATE</literal>, <literal>ALTER</literal>, <literal>DROP</literal>, - <literal>SECURITY LABEL</literal>, - <literal>COMMENT</literal>, <literal>GRANT</literal> or <literal>REVOKE</literal> - command. No check whether the affected object exists or doesn't exist is - performed before the event trigger fires. - As an exception, however, this event does not occur for - DDL commands targeting shared objects — databases, roles, and tablespaces - — or for commands targeting event triggers themselves. The event trigger - mechanism does not support these object types. - <literal>ddl_command_start</literal> also occurs just before the execution of a - <literal>SELECT INTO</literal> command, since this is equivalent to - <literal>CREATE TABLE AS</literal>. + execution of a DDL command. DDL commands in this context are: + <itemizedlist> + <listitem><para><literal>CREATE</literal></para></listitem> + <listitem><para><literal>ALTER</literal></para></listitem> + <listitem><para><literal>DROP</literal></para></listitem> + <listitem><para><literal>COMMENT</literal></para></listitem> + <listitem><para><literal>GRANT</literal></para></listitem> + <listitem><para><literal>IMPORT FOREIGN SCHEMA</literal></para></listitem> + <listitem><para><literal>REINDEX</literal></para></listitem> + <listitem><para><literal>REFRESH MATERIALIZED VIEW</literal></para></listitem> + <listitem><para><literal>REVOKE</literal></para></listitem> + <listitem><para><literal>SECURITY LABEL</literal></para></listitem> + </itemizedlist> + <literal>ddl_command_start</literal> also occurs just before the + execution of a <literal>SELECT INTO</literal> command, since this is + equivalent to <literal>CREATE TABLE AS</literal>. + </para> + + <para> + As an exception, this event does not occur for DDL commands targeting + shared objects: + <itemizedlist> + <listitem><para>databases</para></listitem> + <listitem><para>roles (role definitions and role memberships)</para></listitem> + <listitem><para>tablespaces</para></listitem> + <listitem><para>parameter privileges</para></listitem> + <listitem><para><command>ALTER SYSTEM</command></para></listitem> + </itemizedlist> + This event also does not occur for commands targeting event triggers + themselves. + </para> + + <para> + No check whether the affected object exists or doesn't exist is performed + before the event trigger fires. </para> + </sect2> + + <sect2 id="event-trigger-ddl_command_end"> + <title>ddl_command_end</title> <para> The <literal>ddl_command_end</literal> event occurs just after the execution of - this same set of commands. To obtain more details on the <acronym>DDL</acronym> + the same set of commands as <literal>ddl_command_start</literal>. To + obtain more details on the <acronym>DDL</acronym> operations that took place, use the set-returning function <literal>pg_event_trigger_ddl_commands()</literal> from the <literal>ddl_command_end</literal> event trigger code (see @@ -85,17 +120,31 @@ after the actions have taken place (but before the transaction commits), and thus the system catalogs can be read as already changed. </para> + </sect2> + + <sect2 id="event-trigger-sql_drop"> + <title>sql_drop</title> <para> The <literal>sql_drop</literal> event occurs just before the <literal>ddl_command_end</literal> event trigger for any operation that drops - database objects. To list the objects that have been dropped, use the + database objects. Note that besides the obvious <literal>DROP</literal> + commands, some <literal>ALTER</literal> commands can also trigger an + <literal>sql_drop</literal> event. + </para> + + <para> + To list the objects that have been dropped, use the set-returning function <literal>pg_event_trigger_dropped_objects()</literal> from the <literal>sql_drop</literal> event trigger code (see <xref linkend="functions-event-triggers"/>). Note that the trigger is executed after the objects have been deleted from the system catalogs, so it's not possible to look them up anymore. </para> + </sect2> + + <sect2 id="event-trigger-table_rewrite"> + <title>table_rewrite</title> <para> The <literal>table_rewrite</literal> event occurs just before a table is @@ -105,11 +154,15 @@ like <literal>CLUSTER</literal> and <literal>VACUUM</literal>, the <literal>table_rewrite</literal> event is not triggered by them. To find the OID of the table that was rewritten, use the function - <literal>pg_event_trigger_table_rewrite_oid()</literal> (see - <xref linkend="functions-event-triggers"/>). To discover the reason(s) - for the rewrite, use the function - <literal>pg_event_trigger_table_rewrite_reason()</literal>. + <literal>pg_event_trigger_table_rewrite_oid()</literal>, to discover the + reason(s) for the rewrite, use the function + <literal>pg_event_trigger_table_rewrite_reason()</literal> (see <xref + linkend="functions-event-triggers"/>). </para> + </sect2> + + <sect2 id="event-trigger-aborted-transactions"> + <title>Event Triggers in Aborted Transactions</title> <para> Event triggers (like other functions) cannot be executed in an aborted @@ -122,11 +175,10 @@ back, just as they would be in any other case where the containing transaction aborts. </para> + </sect2> - <para> - For a complete list of commands supported by the event trigger mechanism, - see <xref linkend="event-trigger-matrix"/>. - </para> + <sect2 id="event-trigger-creating"> + <title>Creating Event Triggers</title> <para> Event triggers are created using the command <xref linkend="sql-createeventtrigger"/>. @@ -148,935 +200,7 @@ to intercept. A common use of such triggers is to restrict the range of DDL operations which users may perform. </para> - </sect1> - - <sect1 id="event-trigger-matrix"> - <title>Event Trigger Firing Matrix</title> - - <para> - <xref linkend="event-trigger-by-command-tag"/> lists all commands - for which event triggers are supported. - </para> - - <table id="event-trigger-by-command-tag"> - <title>Event Trigger Support by Command Tag</title> - <tgroup cols="6"> - <colspec colname="col1" colwidth="2*"/> - <colspec colname="col2" colwidth="1*"/> - <colspec colname="col3" colwidth="1*"/> - <colspec colname="col4" colwidth="1*"/> - <colspec colname="col5" colwidth="1*"/> - <colspec colname="col6" colwidth="1*"/> - <thead> - <row> - <entry>Command Tag</entry> - <entry><literal>ddl_&zwsp;command_&zwsp;start</literal></entry> - <entry><literal>ddl_&zwsp;command_&zwsp;end</literal></entry> - <entry><literal>sql_&zwsp;drop</literal></entry> - <entry><literal>table_&zwsp;rewrite</literal></entry> - <entry>Notes</entry> - </row> - </thead> - <tbody> - <row> - <entry align="left"><literal>ALTER AGGREGATE</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>ALTER COLLATION</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>ALTER CONVERSION</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>ALTER DOMAIN</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>ALTER DEFAULT PRIVILEGES</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>ALTER EXTENSION</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>ALTER FOREIGN DATA WRAPPER</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>ALTER FOREIGN TABLE</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>ALTER FUNCTION</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>ALTER LANGUAGE</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>ALTER LARGE OBJECT</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>ALTER MATERIALIZED VIEW</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>ALTER OPERATOR</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>ALTER OPERATOR CLASS</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>ALTER OPERATOR FAMILY</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>ALTER POLICY</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>ALTER PROCEDURE</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>ALTER PUBLICATION</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>ALTER ROUTINE</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>ALTER SCHEMA</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>ALTER SEQUENCE</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>ALTER SERVER</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>ALTER STATISTICS</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>ALTER SUBSCRIPTION</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>ALTER TABLE</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>ALTER TEXT SEARCH CONFIGURATION</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>ALTER TEXT SEARCH DICTIONARY</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>ALTER TEXT SEARCH PARSER</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>ALTER TEXT SEARCH TEMPLATE</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>ALTER TRIGGER</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>ALTER TYPE</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>ALTER USER MAPPING</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>ALTER VIEW</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>COMMENT</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left">Only for local objects</entry> - </row> - <row> - <entry align="left"><literal>CREATE ACCESS METHOD</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>CREATE AGGREGATE</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>CREATE CAST</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>CREATE COLLATION</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>CREATE CONVERSION</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>CREATE DOMAIN</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>CREATE EXTENSION</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>CREATE FOREIGN DATA WRAPPER</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>CREATE FOREIGN TABLE</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>CREATE FUNCTION</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>CREATE INDEX</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>CREATE LANGUAGE</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>CREATE MATERIALIZED VIEW</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>CREATE OPERATOR</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>CREATE OPERATOR CLASS</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>CREATE OPERATOR FAMILY</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>CREATE POLICY</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>CREATE PROCEDURE</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>CREATE PUBLICATION</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>CREATE RULE</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>CREATE SCHEMA</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>CREATE SEQUENCE</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>CREATE SERVER</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>CREATE STATISTICS</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>CREATE SUBSCRIPTION</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>CREATE TABLE</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>CREATE TABLE AS</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>CREATE TEXT SEARCH CONFIGURATION</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>CREATE TEXT SEARCH DICTIONARY</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>CREATE TEXT SEARCH PARSER</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>CREATE TEXT SEARCH TEMPLATE</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>CREATE TRIGGER</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>CREATE TYPE</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>CREATE USER MAPPING</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>CREATE VIEW</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>DROP ACCESS METHOD</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>DROP AGGREGATE</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>DROP CAST</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>DROP COLLATION</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>DROP CONVERSION</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>DROP DOMAIN</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>DROP EXTENSION</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>DROP FOREIGN DATA WRAPPER</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>DROP FOREIGN TABLE</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>DROP FUNCTION</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>DROP INDEX</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>DROP LANGUAGE</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>DROP MATERIALIZED VIEW</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>DROP OPERATOR</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>DROP OPERATOR CLASS</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>DROP OPERATOR FAMILY</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>DROP OWNED</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>DROP POLICY</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>DROP PROCEDURE</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>DROP PUBLICATION</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>DROP ROUTINE</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>DROP RULE</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>DROP SCHEMA</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>DROP SEQUENCE</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>DROP SERVER</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>DROP STATISTICS</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>DROP SUBSCRIPTION</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>DROP TABLE</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>DROP TEXT SEARCH CONFIGURATION</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>DROP TEXT SEARCH DICTIONARY</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>DROP TEXT SEARCH PARSER</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>DROP TEXT SEARCH TEMPLATE</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>DROP TRIGGER</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>DROP TYPE</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>DROP USER MAPPING</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>DROP VIEW</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>GRANT</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left">Only for local objects</entry> - </row> - <row> - <entry align="left"><literal>IMPORT FOREIGN SCHEMA</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>REFRESH MATERIALIZED VIEW</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>REINDEX</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - <row> - <entry align="left"><literal>REVOKE</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left">Only for local objects</entry> - </row> - <row> - <entry align="left"><literal>SECURITY LABEL</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left">Only for local objects</entry> - </row> - <row> - <entry align="left"><literal>SELECT INTO</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>X</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="center"><literal>-</literal></entry> - <entry align="left"></entry> - </row> - </tbody> - </tgroup> - </table> + </sect2> </sect1> <sect1 id="event-trigger-interface"> diff --git a/src/backend/commands/event_trigger.c b/src/backend/commands/event_trigger.c index a586d246ece..dcfc1dbaffd 100644 --- a/src/backend/commands/event_trigger.c +++ b/src/backend/commands/event_trigger.c @@ -1123,7 +1123,7 @@ EventTriggerInvoke(List *fn_oid_list, EventTriggerData *trigdata) /* * Do event triggers support this object type? * - * See also event trigger support matrix in event-trigger.sgml. + * See also event trigger documentation in event-trigger.sgml. */ bool EventTriggerSupportsObjectType(ObjectType obtype) @@ -1147,7 +1147,7 @@ EventTriggerSupportsObjectType(ObjectType obtype) /* * Do event triggers support this object class? * - * See also event trigger support matrix in event-trigger.sgml. + * See also event trigger documentation in event-trigger.sgml. */ bool EventTriggerSupportsObject(const ObjectAddress *object) diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c index b2ea8125c92..f28bf371059 100644 --- a/src/backend/tcop/utility.c +++ b/src/backend/tcop/utility.c @@ -535,6 +535,9 @@ ProcessUtility(PlannedStmt *pstmt, * event trigger code not be invoked when doing START TRANSACTION for * example, because we might need to refresh the event trigger cache, * which requires being in a valid transaction. + * + * When adding or moving utility commands, check that the documentation in + * event-trigger.sgml is kept up to date. */ void standard_ProcessUtility(PlannedStmt *pstmt, |