event-trigger-docs-incremental.patch
application/octet-stream
Filename: event-trigger-docs-incremental.patch
Type: application/octet-stream
Part: 0
Message:
Re: Event Triggers reduced, v1
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: unified
| File | + | − |
|---|---|---|
| doc/src/sgml/catalogs.sgml | 14 | 12 |
| doc/src/sgml/event-trigger.sgml | 466 | 0 |
| doc/src/sgml/filelist.sgml | 1 | 0 |
| doc/src/sgml/plperl.sgml | 6 | 6 |
| doc/src/sgml/plpgsql.sgml | 10 | 14 |
| doc/src/sgml/plpython.sgml | 5 | 5 |
| doc/src/sgml/pltcl.sgml | 4 | 4 |
| doc/src/sgml/postgres.sgml | 1 | 0 |
| doc/src/sgml/ref/alter_event_trigger.sgml | 3 | 3 |
| doc/src/sgml/ref/create_event_trigger.sgml | 26 | 411 |
| doc/src/sgml/ref/drop_event_trigger.sgml | 8 | 6 |
| doc/src/sgml/trigger.sgml | 0 | 18 |
diff --git a/doc/src/sgml/catalogs.sgml b/doc/src/sgml/catalogs.sgml
index dae8028..b100a42 100644
--- a/doc/src/sgml/catalogs.sgml
+++ b/doc/src/sgml/catalogs.sgml
@@ -99,11 +99,6 @@
</row>
<row>
- <entry><link linkend="catalog-pg-event-trigger"><structname>pg_event_trigger</structname></link></entry>
- <entry>event triggers</entry>
- </row>
-
- <row>
<entry><link linkend="catalog-pg-constraint"><structname>pg_constraint</structname></link></entry>
<entry>check constraints, unique constraints, primary key constraints, foreign key constraints</entry>
</row>
@@ -149,6 +144,11 @@
</row>
<row>
+ <entry><link linkend="catalog-pg-event-trigger"><structname>pg_event_trigger</structname></link></entry>
+ <entry>event triggers</entry>
+ </row>
+
+ <row>
<entry><link linkend="catalog-pg-extension"><structname>pg_extension</structname></link></entry>
<entry>installed extensions</entry>
</row>
@@ -1871,6 +1871,7 @@
<para>
The catalog <structname>pg_event_trigger</structname> stores event triggers.
+ See <xref linkend="event-triggers"> for more information.
</para>
<table>
@@ -1891,30 +1892,28 @@
<entry><structfield>evtname</structfield></entry>
<entry><type>name</type></entry>
<entry></entry>
- <entry>Trigger name (unique)</entry>
+ <entry>Trigger name (must be unique)</entry>
</row>
<row>
<entry><structfield>evtevent</structfield></entry>
<entry><type>name</type></entry>
<entry></entry>
- <entry>The event this trigger fires for.</entry>
+ <entry>Identifies the event for which this trigger fires</entry>
</row>
<row>
<entry><structfield>evtowner</structfield></entry>
<entry><type>oid</type></entry>
<entry><literal><link linkend="catalog-pg-authid"><structname>pg_authid</structname></link>.oid</literal></entry>
- <entry>Owner of the event</entry>
+ <entry>Owner of the event trigger</entry>
</row>
<row>
<entry><structfield>evtfoid</structfield></entry>
<entry><type>oid</type></entry>
<entry><literal><link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.oid</literal></entry>
- <entry>
- The OID of the function called by this event trigger.
- </entry>
+ <entry>The function to be called</entry>
</row>
<row>
@@ -1935,7 +1934,10 @@
<entry><structfield>evttags</structfield></entry>
<entry><type>text[]</type></entry>
<entry></entry>
- <entry>Command tags of the commands this trigger is restricted to.</entry>
+ <entry>
+ Command tags for which this trigger will fire. If NULL, the firing
+ of this trigger is not restricted on the basis of the command tag.
+ </entry>
</row>
</tbody>
</tgroup>
diff --git a/doc/src/sgml/event-trigger.sgml b/doc/src/sgml/event-trigger.sgml
new file mode 100644
index 0000000..4ff93d0
--- /dev/null
+++ b/doc/src/sgml/event-trigger.sgml
@@ -0,0 +1,466 @@
+<!-- doc/src/sgml/event-trigger.sgml -->
+
+ <chapter id="event-triggers">
+ <title>Event Triggers</title>
+
+ <indexterm zone="event-triggers">
+ <primary>event trigger</primary>
+ </indexterm>
+
+ <para>
+ To supplement the trigger mechanism discussed in <xref linkend="triggers">,
+ <productname>PostgreSQL</> also provides event triggers. Unlike regular
+ triggers, which are attached to a single table and capture only DML events,
+ event triggers are global to a particular database and are capable of
+ capturing DDL events.
+ </para>
+
+ <para>
+ Like regular triggers, event triggers can be written in any procedural
+ language that includes event trigger support, or in C, but not in plain
+ SQL.
+ </para>
+
+ <sect1 id="event-trigger-definition">
+ <title>Overview of Event Trigger Behavior</title>
+
+ <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 supported event is <literal>command_start</>. Support for
+ additional events may be added in future releases.
+ </para>
+
+ <para>
+ The <literal>command_start</> event occurs just before the execution of
+ many SQL commands, most of which can be broadly described as
+ <link linkend="ddl">DDL</link>. There are a number of commands that,
+ for various reasons, are specifically excluded from the event trigger
+ system:
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ The <literal>command_start</> event does not occur for commands that
+ access or modify data within a particular table, such
+ <xref linkend="sql-select">, <xref linkend="sql-insert">,
+ <xref linkend="sql-update">, <xref linkend="sql-delete">, and
+ <xref linkend="sql-truncate">. This also includes commands related
+ to prepared plans, such as <xref linkend="sql-prepare">,
+ <xref linkend="sql-deallocate">, <xref linkend="sql-declare">,
+ and <xref linkend="sql-fetch">. Ordinary triggers or rules should
+ be used in these cases.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The <literal>command_start</> event does not occur for commands that
+ create, alter, or drop global objects. Unlike the event trigger, these
+ objects are not part of the current database; they are accessible from
+ all databases in the cluster, and are therefore unaffected by event
+ triggers. Such objects include databases, tablespaces, and roles.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The <literal>command_start</> event does not occur for commands where
+ firing a trigger might result either result in system instability or
+ interfere with the administrator's ability to regain control of the
+ database. These include transaction control commands, such as
+ <xref linkend="sql-begin"> or <xref linkend="sql-commit">; configuration
+ commands, such as <xref linkend="sql-set"> or <xref linkend="sql-show">;
+ and commands related to the event trigger mechanism itself, such as
+ <xref linkend="sql-createeventtrigger">,
+ <xref linkend="sql-altereventtrigger">, and
+ <xref linkend="sql-dropeventtrigger">.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ For a complete list of commands supported by the event trigger mechanism,
+ see <xref linkend="event-trigger-matrix">.
+ </para>
+
+ <para>
+ In order to create an event trigger, you must first create a function with
+ the special return type <literal>event_trigger</literal>. This function
+ need not (and may not) return a value; the return type serves merely as
+ a signal that the function is to be invoked as an event trigger.
+ </para>
+
+ <para>
+ If more than one event trigger is defined for a particular event, they will
+ fire in alphabetical order by trigger name.
+ </para>
+
+ <para>
+ A trigger definition can also specify a <literal>WHEN</literal>
+ condition so that, for example, a <literal>command_start</literal>
+ tag can be fired only for particular commands which the user wishes
+ 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="2">
+ <thead>
+ <row>
+ <entry>command tag</entry>
+ <entry><literal>command_start</literal></entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry align="left"><literal>ALTER AGGREGATE</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>ALTER COLLATION</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>ALTER CONVERSION</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>ALTER DOMAIN</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>ALTER EXTENSION</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>ALTER FOREIGN DATA WRAPPER</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>ALTER FOREIGN TABLE</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>ALTER FUNCTION</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>ALTER LANGUAGE</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>ALTER OPERATOR</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>ALTER OPERATOR CLASS</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>ALTER OPERATOR FAMILY</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>ALTER SCHEMA</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>ALTER SEQUENCE</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>ALTER SERVER</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>ALTER TABLE</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>ALTER TEXT SEARCH CONFIGURATION</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>ALTER TEXT SEARCH DICTIONARY</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>ALTER TEXT SEARCH PARSER</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>ALTER TEXT SEARCH TEMPLATE</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>ALTER TRIGGER</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>ALTER TYPE</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>ALTER USER MAPPING</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>ALTER VIEW</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>CLUSTER</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>CREATE AGGREGATE</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>CREATE CAST</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>CREATE COLLATION</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>CREATE CONVERSION</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>CREATE DOMAIN</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>CREATE EXTENSION</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>CREATE FOREIGN DATA WRAPPER</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>CREATE FOREIGN TABLE</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>CREATE FUNCTION</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>CREATE INDEX</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>CREATE LANGUAGE</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>CREATE OPERATOR</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>CREATE OPERATOR CLASS</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>CREATE OPERATOR FAMILY</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>CREATE RULE</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>CREATE SCHEMA</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>CREATE SEQUENCE</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>CREATE SERVER</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>CREATE TABLE</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>CREATE TABLE AS</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>CREATE TEXT SEARCH CONFIGURATION</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>CREATE TEXT SEARCH DICTIONARY</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>CREATE TEXT SEARCH PARSER</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>CREATE TEXT SEARCH TEMPLATE</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>CREATE TRIGGER</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>CREATE TYPE</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>CREATE USER MAPPING</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>CREATE VIEW</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>DROP AGGREGATE</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>DROP CAST</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>DROP COLLATION</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>DROP CONVERSION</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>DROP DOMAIN</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>DROP EXTENSION</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>DROP FOREIGN DATA WRAPPER</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>DROP FOREIGN TABLE</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>DROP FUNCTION</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>DROP INDEX</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>DROP LANGUAGE</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>DROP OPERATOR</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>DROP OPERATOR CLASS</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>DROP OPERATOR FAMILY</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>DROP RULE</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>DROP SCHEMA</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>DROP SEQUENCE</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>DROP SERVER</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>DROP TABLE</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>DROP TEXT SEARCH CONFIGURATION</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>DROP TEXT SEARCH DICTIONARY</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>DROP TEXT SEARCH PARSER</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>DROP TEXT SEARCH TEMPLATE</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>DROP TRIGGER</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>DROP TYPE</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>DROP USER MAPPING</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>DROP VIEW</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>LOAD</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>REINDEX</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>SELECT INTO</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ <row>
+ <entry align="left"><literal>VACUUM</literal></entry>
+ <entry align="center"><literal>X</literal></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+</chapter>
diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml
index 82b9e39..db4cc3a 100644
--- a/doc/src/sgml/filelist.sgml
+++ b/doc/src/sgml/filelist.sgml
@@ -61,6 +61,7 @@
<!ENTITY rules SYSTEM "rules.sgml">
<!ENTITY spi SYSTEM "spi.sgml">
<!ENTITY trigger SYSTEM "trigger.sgml">
+<!ENTITY event-trigger SYSTEM "event-trigger.sgml">
<!ENTITY xaggr SYSTEM "xaggr.sgml">
<!ENTITY xfunc SYSTEM "xfunc.sgml">
<!ENTITY xindex SYSTEM "xindex.sgml">
diff --git a/doc/src/sgml/plperl.sgml b/doc/src/sgml/plperl.sgml
index 9ec7a6e..e490086 100644
--- a/doc/src/sgml/plperl.sgml
+++ b/doc/src/sgml/plperl.sgml
@@ -1220,7 +1220,7 @@ CREATE TRIGGER test_valid_id_trig
</sect2>
<sect2 id="plperl-event-trigger">
- <title>Trigger Procedures on Events in PL/Perl </title>
+ <title>Trigger Procedures on Events in PL/Perl</title>
<indexterm>
<primary>event trigger</primary>
@@ -1229,9 +1229,9 @@ CREATE TRIGGER test_valid_id_trig
<para>
Event trigger procedures can be written in PL/Perl.
- <productname>PostgreSQL</productname> requires that a procedure that is to be called
- as a trigger must be declared as a function with no arguments
- and a return type of <literal>event_trigger</>.
+ <productname>PostgreSQL</productname> requires that a procedure that
+ is to be called as an event trigger must be declared as a function with
+ no arguments and a return type of <literal>event_trigger</>.
</para>
<para>
@@ -1272,7 +1272,7 @@ CREATE TRIGGER test_valid_id_trig
<term><varname>$_TD->{objectname}</varname></term>
<listitem>
<para>
- The name of the objectthat caused the trigger procedure
+ The name of the object that caused the trigger procedure
to be invoked.
</para>
</listitem>
@@ -1289,7 +1289,7 @@ CREATE TRIGGER test_valid_id_trig
</varlistentry>
</variablelist>
</para>
- </sect2>
+ </sect2>
</sect1>
diff --git a/doc/src/sgml/plpgsql.sgml b/doc/src/sgml/plpgsql.sgml
index fadd5d7..a21aaf2 100644
--- a/doc/src/sgml/plpgsql.sgml
+++ b/doc/src/sgml/plpgsql.sgml
@@ -3378,7 +3378,7 @@ RAISE unique_violation USING MESSAGE = 'Duplicate user ID: ' || user_id;
</indexterm>
<sect2 id="plpgsql-dml-trigger">
- <title>Triggers on data change</title>
+ <title>Triggers on data changes</title>
<para>
<application>PL/pgSQL</application> can be used to define trigger
@@ -3930,19 +3930,19 @@ SELECT * FROM sales_summary_bytime;
</sect2>
<sect2 id="plpgsql-event-trigger">
- <title>Triggers on event</title>
+ <title>Triggers on events</title>
<para>
- <application>PL/pgSQL</application> can be used to define command
- trigger procedures. An event trigger procedure is created with the
- <command>CREATE FUNCTION</> command, declaring it as a function with
- no arguments and a return type of <type>event trigger</type>.
+ <application>PL/pgSQL</application> can be used to define event
+ triggers. <productname>PostgreSQL</> requires that a procedure that
+ is to be called as an event trigger must be declared as a function with
+ no arguments and a return type of <literal>event_trigger</>.
</para>
- <para>
- When a <application>PL/pgSQL</application> function is called as a
- event trigger, several special variables are created automatically
- in the top-level block. They are:
+ <para>
+ When a <application>PL/pgSQL</application> function is called as a
+ event trigger, several special variables are created automatically
+ in the top-level block. They are:
<variablelist>
<varlistentry>
@@ -3999,10 +3999,6 @@ SELECT * FROM sales_summary_bytime;
</variablelist>
</para>
- <para>
- The event trigger function's return value is not used.
- </para>
-
<para>
<xref linkend="plpgsql-event-trigger-example"> shows an example of a
event trigger procedure in <application>PL/pgSQL</application>.
diff --git a/doc/src/sgml/plpython.sgml b/doc/src/sgml/plpython.sgml
index e2a8f41..99ce8f9 100644
--- a/doc/src/sgml/plpython.sgml
+++ b/doc/src/sgml/plpython.sgml
@@ -872,7 +872,7 @@ $$ LANGUAGE plpythonu;
</sect2>
<sect2 id="plpython-event-trigger">
- <title>Trigger Procedures on Events in PL/Python </title>
+ <title>Trigger Procedures on Events in PL/Python</title>
<indexterm>
<primary>event trigger</primary>
@@ -881,9 +881,9 @@ $$ LANGUAGE plpythonu;
<para>
Event trigger procedures can be written in PL/Python.
- <productname>PostgreSQL</productname> requires that a procedure that is to be called
- as a trigger must be declared as a function with no arguments
- and a return type of <literal>event_trigger</>.
+ <productname>PostgreSQL</productname> requires that a procedure that
+ is to be called as an event trigger must be declared as a function with
+ no arguments and a return type of <literal>event_trigger</>.
</para>
<para>
@@ -924,7 +924,7 @@ $$ LANGUAGE plpythonu;
<term><varname>TD["objectname"]</varname></term>
<listitem>
<para>
- The name of the objectthat caused the trigger procedure
+ The name of the object that caused the trigger procedure
to be invoked.
</para>
</listitem>
diff --git a/doc/src/sgml/pltcl.sgml b/doc/src/sgml/pltcl.sgml
index c9a4e4c..c932ddb 100644
--- a/doc/src/sgml/pltcl.sgml
+++ b/doc/src/sgml/pltcl.sgml
@@ -725,9 +725,9 @@ CREATE TRIGGER trig_mytab_modcount BEFORE INSERT OR UPDATE ON mytab
<para>
Event trigger procedures can be written in PL/Tcl.
- <productname>PostgreSQL</productname> requires that a procedure that is to be called
- as a trigger must be declared as a function with no arguments
- and a return type of <literal>event_trigger</>.
+ <productname>PostgreSQL</productname> requires that a procedure that
+ is to be called as an event trigger must be declared as a function with
+ no arguments and a return type of <literal>event_trigger</>.
</para>
<para>
@@ -768,7 +768,7 @@ CREATE TRIGGER trig_mytab_modcount BEFORE INSERT OR UPDATE ON mytab
<term><varname>$TG_objectname</varname></term>
<listitem>
<para>
- The name of the objectthat caused the trigger procedure
+ The name of the object that caused the trigger procedure
to be invoked.
</para>
</listitem>
diff --git a/doc/src/sgml/postgres.sgml b/doc/src/sgml/postgres.sgml
index 7e80265..4ef1fc1 100644
--- a/doc/src/sgml/postgres.sgml
+++ b/doc/src/sgml/postgres.sgml
@@ -208,6 +208,7 @@
&extend;
&trigger;
+ &event-trigger;
&rules;
&xplang;
diff --git a/doc/src/sgml/ref/alter_event_trigger.sgml b/doc/src/sgml/ref/alter_event_trigger.sgml
index d4af986..db4727b 100644
--- a/doc/src/sgml/ref/alter_event_trigger.sgml
+++ b/doc/src/sgml/ref/alter_event_trigger.sgml
@@ -93,12 +93,12 @@ ALTER EVENT TRIGGER <replaceable class="PARAMETER">name</replaceable> RENAME TO
</variablelist>
</refsect1>
- <refsect1>
+ <refsect1 id="sql-alterventtrigger-compatibility">
<title>Compatibility</title>
<para>
- <command>ALTER EVENT TRIGGER</command> is a <productname>PostgreSQL</>
- extension of the SQL standard.
+ There is no <command>ALTER EVENT TRIGGER</command> statement in the
+ SQL standard.
</para>
</refsect1>
diff --git a/doc/src/sgml/ref/create_event_trigger.sgml b/doc/src/sgml/ref/create_event_trigger.sgml
index 0e3b0f8..3b3d474 100644
--- a/doc/src/sgml/ref/create_event_trigger.sgml
+++ b/doc/src/sgml/ref/create_event_trigger.sgml
@@ -24,7 +24,7 @@ PostgreSQL documentation
CREATE EVENT TRIGGER <replaceable class="PARAMETER">name</replaceable>
ON <replaceable class="PARAMETER">event</replaceable>
[ WHEN <replaceable class="PARAMETER">filter_variable</replaceable> IN (filter_value [ , ... ] ) ]
- EXECUTE PROCEDURE <replaceable class="PARAMETER">function_name</replaceable> ()
+ EXECUTE PROCEDURE <replaceable class="PARAMETER">function_name</replaceable>()
</synopsis>
</refsynopsisdiv>
@@ -33,35 +33,11 @@ CREATE EVENT TRIGGER <replaceable class="PARAMETER">name</replaceable>
<para>
<command>CREATE EVENT TRIGGER</command> creates a new event trigger.
- The trigger will be associated with the specified event and will
- execute the specified
- function <replaceable class="parameter">function_name</replaceable> when
- that event occurs.
- </para>
-
- <para>
- The event trigger gives a procedure to fire before the event is
- executed. In some cases the procedure can be fired instead of the event
- code PostgreSQL would run itself. A event trigger's function must
- return <literal>event_trigger</literal> data type. It can then only
- abort the execution of the command by raising an exception.
- </para>
-
- <para>
- If multiple triggers of the same kind are defined for the same event,
- they will be fired in alphabetical order by name.
- </para>
-
- <para>
- Note that objects dropped by the effect of <literal>DROP
- CASCADE</literal> will not result in a event trigger firing, only the
- top-level event for the main object will fire a event trigger. That
- also applies to other dependencies following, as in <literal>DROP OWNED
- BY</literal>.
- </para>
-
- <para>
- Refer to <xref linkend="triggers"> for more information about triggers.
+ Whenever the designated event occurs and the <literal>WHEN</> condition
+ associated with the trigger, if any, is satisfied, the trigger function
+ will be executed. For a general introduction to event triggers, see
+ <xref linkend="event-triggers">. The user who creates an event trigger
+ becomes its owner.
</para>
</refsect1>
@@ -73,9 +49,8 @@ CREATE EVENT TRIGGER <replaceable class="PARAMETER">name</replaceable>
<term><replaceable class="parameter">name</replaceable></term>
<listitem>
<para>
- The name to give the new trigger. This must be distinct from the name
- of any other trigger for the same table. The name cannot be
- schema-qualified.
+ The name to give the new trigger. This name must be unique within
+ the database.
</para>
</listitem>
</varlistentry>
@@ -85,8 +60,8 @@ CREATE EVENT TRIGGER <replaceable class="PARAMETER">name</replaceable>
<listitem>
<para>
The name of the event that triggers a call to the given function.
- Currently only <literal>command_start</literal> is supported, that
- event is run before the specific command code takes control.
+ See <xref linkend="event-trigger-definition"> for more information
+ on event names.
</para>
</listitem>
</varlistentry>
@@ -95,12 +70,11 @@ CREATE EVENT TRIGGER <replaceable class="PARAMETER">name</replaceable>
<term><replaceable class="parameter">filter_variable</replaceable></term>
<listitem>
<para>
- The name of a variable used to filter events, allowing to control
- which cases must be handled by the trigger function. Currently the
- only
- provided <replaceable class="parameter">filter_variable</replaceable>
- is named <literal>TAG</literal> and contains the command tag for which
- the trigger is about to fire.
+ The name of a variable used to filter events. This makes it possible
+ to restrict the firing of the trigger to a subset of the cases in which
+ it is supported. Currently the only suppoted
+ <replaceable class="parameter">filter_variable</replaceable>
+ is <literal>TAG</literal>.
</para>
</listitem>
</varlistentry>
@@ -109,364 +83,10 @@ CREATE EVENT TRIGGER <replaceable class="PARAMETER">name</replaceable>
<term><replaceable class="parameter">filter_value</replaceable></term>
<listitem>
<para>
- A list of values that the
+ A list of values for the
associated <replaceable class="parameter">filter_variable</replaceable>
- can have to allow for the trigger to fire.
- </para>
- <para>
- The <literal>TAG</literal> variable accepts the following values:
- </para>
- <informaltable id="supported-command-tags">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>command tag</entry>
- <entry>supported events, in order</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry align="left"><literal>ALTER AGGREGATE</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>ALTER COLLATION</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>ALTER CONVERSION</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>ALTER DOMAIN</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>ALTER EXTENSION</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>ALTER FOREIGN DATA WRAPPER</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>ALTER FOREIGN TABLE</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>ALTER FUNCTION</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>ALTER LANGUAGE</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>ALTER OPERATOR</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>ALTER OPERATOR CLASS</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>ALTER OPERATOR FAMILY</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>ALTER SCHEMA</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>ALTER SEQUENCE</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>ALTER SERVER</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>ALTER TABLE</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>ALTER TEXT SEARCH CONFIGURATION</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>ALTER TEXT SEARCH DICTIONARY</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>ALTER TEXT SEARCH PARSER</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>ALTER TEXT SEARCH TEMPLATE</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>ALTER TRIGGER</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>ALTER TYPE</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>ALTER USER MAPPING</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>ALTER VIEW</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>CLUSTER</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>CREATE AGGREGATE</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>CREATE CAST</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>CREATE COLLATION</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>CREATE CONVERSION</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>CREATE DOMAIN</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>CREATE EXTENSION</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>CREATE FOREIGN DATA WRAPPER</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>CREATE FOREIGN TABLE</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>CREATE FUNCTION</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>CREATE INDEX</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>CREATE LANGUAGE</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>CREATE OPERATOR</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>CREATE OPERATOR CLASS</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>CREATE OPERATOR FAMILY</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>CREATE RULE</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>CREATE SCHEMA</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>CREATE SEQUENCE</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>CREATE SERVER</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>CREATE TABLE</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>CREATE TABLE AS</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>CREATE TEXT SEARCH CONFIGURATION</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>CREATE TEXT SEARCH DICTIONARY</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>CREATE TEXT SEARCH PARSER</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>CREATE TEXT SEARCH TEMPLATE</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>CREATE TRIGGER</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>CREATE TYPE</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>CREATE USER MAPPING</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>CREATE VIEW</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>DROP AGGREGATE</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>DROP CAST</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>DROP COLLATION</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>DROP CONVERSION</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>DROP DOMAIN</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>DROP EXTENSION</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>DROP FOREIGN DATA WRAPPER</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>DROP FOREIGN TABLE</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>DROP FUNCTION</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>DROP INDEX</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>DROP LANGUAGE</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>DROP OPERATOR</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>DROP OPERATOR CLASS</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>DROP OPERATOR FAMILY</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>DROP RULE</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>DROP SCHEMA</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>DROP SEQUENCE</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>DROP SERVER</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>DROP TABLE</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>DROP TEXT SEARCH CONFIGURATION</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>DROP TEXT SEARCH DICTIONARY</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>DROP TEXT SEARCH PARSER</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>DROP TEXT SEARCH TEMPLATE</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>DROP TRIGGER</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>DROP TYPE</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>DROP USER MAPPING</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>DROP VIEW</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>LOAD</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>REINDEX</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>SELECT INTO</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- <row>
- <entry align="left"><literal>VACUUM</literal></entry>
- <entry align="left"><literal>command_start</literal></entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- <para>
- That list is also the list of supported commands on which you can
- attach an event trigger.
+ for which the trigger should fire. For <literal>TAG</>, this means a
+ list of command tags (e.g. <literal>'DROP FUNCTION'</>).
</para>
</listitem>
</varlistentry>
@@ -476,7 +96,7 @@ CREATE EVENT TRIGGER <replaceable class="PARAMETER">name</replaceable>
<listitem>
<para>
A user-supplied function that is declared as taking no argument and
- returning type <literal>event trigger</literal>.
+ returning type <literal>event_trigger</literal>.
</para>
<para>
If your event trigger is implemented in <literal>C</literal> then it
@@ -490,24 +110,20 @@ CREATE EVENT TRIGGER <replaceable class="PARAMETER">name</replaceable>
</variablelist>
</refsect1>
- <refsect1 id="SQL-CREATEEVENTTRIGGER-notes">
+ <refsect1 id="sql-createeventtrigger-notes">
<title>Notes</title>
<para>
To create a trigger on a event, the user must be superuser.
</para>
-
- <para>
- Use <xref linkend="sql-dropeventtrigger"> to remove a event trigger.
- </para>
</refsect1>
- <refsect1 id="SQL-CREATEEVENTTRIGGER-examples">
+ <refsect1 id="sql-createeventtrigger-examples">
<title>Examples</title>
<para>
- Forbids the execution of any command supported by the event trigger
- mechanism, which includes all commands listed above:
+ Forbid the execution of any command supported by the event trigger
+ mechanism:
<programlisting>
CREATE OR REPLACE FUNCTION abort_any_command()
@@ -547,13 +163,12 @@ $$;
</para>
</refsect1>
- <refsect1 id="SQL-CREATEEVENTTRIGGER-compatibility">
+ <refsect1 id="sql-createeventtrigger-compatibility">
<title>Compatibility</title>
<para>
- <command>CREATE EVENT TRIGGER</command> is a
- <productname>PostgreSQL</productname> extension of the <acronym>SQL</>
- standard.
+ There is no <command>CREATE EVENT TRIGGER</command> statement in the
+ SQL standard.
</para>
</refsect1>
diff --git a/doc/src/sgml/ref/drop_event_trigger.sgml b/doc/src/sgml/ref/drop_event_trigger.sgml
index 6b30dd9..86f9628 100644
--- a/doc/src/sgml/ref/drop_event_trigger.sgml
+++ b/doc/src/sgml/ref/drop_event_trigger.sgml
@@ -29,8 +29,9 @@ DROP EVENT TRIGGER [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceabl
<title>Description</title>
<para>
- <command>DROP EVENT TRIGGER</command> removes an existing trigger definition.
- To execute this command, the current user must be superuser.
+ <command>DROP EVENT TRIGGER</command> removes an existing event trigger.
+ To execute this command, the current user must be the owner of the event
+ trigger.
</para>
</refsect1>
@@ -79,7 +80,7 @@ DROP EVENT TRIGGER [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceabl
</variablelist>
</refsect1>
- <refsect1 id="SQL-DROPEVENTTRIGGER-examples">
+ <refsect1 id="sql-dropeventtrigger-examples">
<title>Examples</title>
<para>
@@ -90,13 +91,14 @@ DROP EVENT TRIGGER snitch;
</programlisting></para>
</refsect1>
- <refsect1 id="SQL-DROPEVENTTRIGGER-compatibility">
+ <refsect1 id="sql-dropeventtrigger-compatibility">
<title>Compatibility</title>
<para>
- The <command>DROP EVENT TRIGGER</command> statement is a
- <productname>PostgreSQL</productname> extension.
+ There is no <command>DROP EVENT TRIGGER</command> statement in the
+ SQL standard.
</para>
+
</refsect1>
<refsect1>
diff --git a/doc/src/sgml/trigger.sgml b/doc/src/sgml/trigger.sgml
index 32994b9..f579340 100644
--- a/doc/src/sgml/trigger.sgml
+++ b/doc/src/sgml/trigger.sgml
@@ -27,24 +27,6 @@
plain SQL function language.
</para>
- <para>
- <productname>PostgreSQL</productname> offers both triggers on commands
- (see <xref linkend="ddl">) and triggers on data manipulation
- (see <xref linkend="dml">).
- </para>
-
- <sect1 id="command-triggers">
- <title>Overview of Event Trigger Behavior</title>
-
- <para>
- A trigger is a specification that the database should automatically
- execute a particular function whenever a certain command is performed.
- The whole set of <productname>PostgreSQL</productname> commands is not
- supported for triggers, see <xref linkend="sql-createeventtrigger">
- for details.
- </para>
- </sect1>
-
<sect1 id="trigger-definition">
<title>Overview of Trigger Behavior</title>