diff --git a/doc/src/sgml/ref/create_trigger.sgml b/doc/src/sgml/ref/create_trigger.sgml index 9079bda9a7ec6cada4027c378c98144f13a18327..35701b0aecef089b93574138715ebd61cde477f2 100644 --- a/doc/src/sgml/ref/create_trigger.sgml +++ b/doc/src/sgml/ref/create_trigger.sgml @@ -1,9 +1,13 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_trigger.sgml,v 1.16 2001/09/13 15:55:24 petere Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_trigger.sgml,v 1.17 2001/09/13 18:17:44 petere Exp $ Postgres documentation --> <refentry id="SQL-CREATETRIGGER"> + <docinfo> + <date>2001-09-13</date> + </docinfo> + <refmeta> <refentrytitle id="SQL-CREATETRIGGER-TITLE">CREATE TRIGGER</refentrytitle> <refmiscinfo>SQL - Language Statements</refmiscinfo> @@ -134,78 +138,55 @@ CREATE <citetitle>PostgreSQL Programmer's Guide</citetitle> for more information. </para> + </refsect1> - <refsect2 id="R2-SQL-CREATETRIGGER-3"> - <refsect2info> - <date>1998-09-21</date> - </refsect2info> - <title> - Notes - </title> - <para> - <command>CREATE TRIGGER</command> is a <productname>Postgres</productname> - language extension. - </para> - <para> - Only the relation owner may create a trigger on this relation. - </para> - <para> - As of the current release, STATEMENT triggers are not implemented. - </para> - <para> - Refer to <command>DROP TRIGGER</command> for information on how to - remove triggers. - </para> - </refsect2> + <refsect1 id="SQL-CREATETRIGGER-notes"> + <title>Notes</title> + + <para> + To create a trigger on a table, the user must have the + <literal>TRIGGER</literal> privilege on the table. + </para> + + <para> + As of the current release, <literal>STATEMENT</literal> triggers are not implemented. + </para> + + <para> + Refer to the <xref linkend="sql-droptrigger"> command for + information on how to remove triggers. + </para> </refsect1> <refsect1 id="R1-SQL-CREATETRIGGER-2"> - <title> - Usage - </title> + <title>Examples</title> + <para> Check if the specified distributor code exists in the distributors table before appending or updating a row in the table films: - <programlisting> +<programlisting> CREATE TRIGGER if_dist_exists BEFORE INSERT OR UPDATE ON films FOR EACH ROW EXECUTE PROCEDURE check_primary_key ('did', 'distributors', 'did'); - </programlisting> +</programlisting> </para> + <para> Before cancelling a distributor or updating its code, remove every reference to the table films: - <programlisting> +<programlisting> CREATE TRIGGER if_film_exists BEFORE DELETE OR UPDATE ON distributors FOR EACH ROW EXECUTE PROCEDURE check_foreign_key (1, 'CASCADE', 'did', 'films', 'did'); - </programlisting> +</programlisting> </para> - </refsect1> - - <refsect1 id="R1-SQL-CREATETRIGGER-3"> - <title> - Compatibility - </title> - - <refsect2 id="R2-SQL-CREATETRIGGER-4"> - <refsect2info> - <date>1998-09-21</date> - </refsect2info> - <title> - SQL92 - </title> - <para> - There is no <command>CREATE TRIGGER</command> in <acronym>SQL92</acronym>. - </para> - - <para> - The second example above may also be done by using a FOREIGN KEY - constraint as in: + <para> + The second example can also be done by using a foreign key, + constraint as in: - <programlisting> +<programlisting> CREATE TABLE distributors ( did DECIMAL(3), name VARCHAR(40), @@ -213,9 +194,84 @@ CREATE TABLE distributors ( FOREIGN KEY(did) REFERENCES films ON UPDATE CASCADE ON DELETE CASCADE ); - </programlisting> - </para> - </refsect2> +</programlisting> + </para> + </refsect1> + + <refsect1 id="SQL-CREATETRIGGER-compatibility"> + <title>Compatibility</title> + + <variablelist> + <varlistentry> + <term>SQL92</term> + <listitem> + <para> + There is no <command>CREATE TRIGGER</command> statement in <acronym>SQL92</acronym>. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term>SQL99</term> + <listitem> + <para> + The <command>CREATE TRIGGER</command> statement in + <productname>PostgreSQL</productname> implements a subset of the + SQL99 standard. The following functionality is missing: + <itemizedlist> + <listitem> + <para> + SQL99 allows triggers to fire on updates to specific columns + (e.g., <literal>AFTER UPDATE OF col1, col2</literal>). + </para> + </listitem> + + <listitem> + <para> + SQL99 allows you to define aliases for the <quote>old</quote> + and <quote>new</quote> rows or tables for use in the definiton + of the triggered action (e.g., <literal>CREATE TRIGGER ... ON + tablename REFERENCING OLD ROW AS somename NEW ROW AS + othername ...</literal>). Since + <productname>PostgreSQL</productname> allows trigger + procedures to be written in any number of user-defined + languages, access to the data is handled in a + language-specific way. + </para> + </listitem> + + <listitem> + <para> + <productname>PostgreSQL</productname> only has row-level + triggers, no statement-level triggers. + </para> + </listitem> + + <listitem> + <para> + <productname>PostgreSQL</productname> only allows the + execution of a stored procedure for the triggered action. + SQL99 allows the execution of a number of other SQL commands, + such as <command>CREATE TABLE</command> as triggered action. + This limitation is not hard to work around by creating a + stored procedure that executes these commands. + </para> + </listitem> + </itemizedlist> + </para> + </listitem> + </varlistentry> + </variablelist> + </refsect1> + + <refsect1> + <title>See Also</title> + + <simplelist type="inline"> + <member><xref linkend="sql-createfunction"></member> + <member><xref linkend="sql-droptrigger"></member> + <member><citetitle>PostgreSQL Programmer's Guide</citetitle></member> + </simplelist> </refsect1> </refentry> diff --git a/doc/src/sgml/ref/drop_trigger.sgml b/doc/src/sgml/ref/drop_trigger.sgml index 81a9219f100c87eaa03727c87b0037cf5462e08a..f1bfdadf61f95ccd8257c44a4945bd917807cc0c 100644 --- a/doc/src/sgml/ref/drop_trigger.sgml +++ b/doc/src/sgml/ref/drop_trigger.sgml @@ -1,9 +1,13 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/drop_trigger.sgml,v 1.7 2001/09/03 12:57:50 petere Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/ref/drop_trigger.sgml,v 1.8 2001/09/13 18:17:44 petere Exp $ Postgres documentation --> <refentry id="SQL-DROPTRIGGER"> + <docinfo> + <date>2001-09-13</date> + </docinfo> + <refmeta> <refentrytitle id="SQL-DROPTRIGGER-TITLE"> DROP TRIGGER @@ -101,58 +105,58 @@ ERROR: DropTrigger: there is no trigger <replaceable class="PARAMETER">name</rep <para> <command>DROP TRIGGER</command> will remove all references to an existing trigger definition. To execute this command the current - user must be the owner of the trigger. + user must be the owner of the table for which the trigger is defined. </para> - - <refsect2 id="R2-SQL-DROPTRIGGER-3"> - <refsect2info> - <date>1998-09-22</date> - </refsect2info> - <title> - Notes - </title> - <para> - <command>DROP TRIGGER</command> is a <productname>Postgres</productname> - language extension. - </para> - <para> - Refer to <command>CREATE TRIGGER</command> for - information on how to create triggers. - </para> - </refsect2> </refsect1> - - <refsect1 id="R1-SQL-DROPTRIGGER-2"> - <title> - Usage - </title> + + <refsect1 id="SQL-DROPTRIGGER-examples"> + <title>Examples</title> + <para> Destroy the <literal>if_dist_exists</literal> trigger on table <literal>films</literal>: - <programlisting> +<programlisting> DROP TRIGGER if_dist_exists ON films; - </programlisting> +</programlisting> </para> </refsect1> - <refsect1 id="R1-SQL-DROPTRIGGER-3"> - <title> - Compatibility - </title> + <refsect1 id="SQL-DROPTRIGGER-compatibility"> + <title>Compatibility</title> - <refsect2 id="R2-SQL-DROPTRIGGER-4"> - <refsect2info> - <date>1998-09-22</date> - </refsect2info> - <title> - SQL92 - </title> - <para> - There is no <command>DROP TRIGGER</command> statement in - <acronym>SQL92</acronym>. - </para> - </refsect2> + <variablelist> + <varlistentry> + <term>SQL92</term> + <listitem> + <para> + There is no <command>DROP TRIGGER</command> statement in + <acronym>SQL92</acronym>. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term>SQL99</term> + <listitem> + <para> + The <command>DROP TRIGGER</command> statement in + <productname>PostgreSQL</productname> is incompatible with + SQL99. In SQL99, trigger names are not local to tables, so the + command is simply <literal>DROP TRIGGER + <replaceable>name</replaceable></literal>. + </para> + </listitem> + </varlistentry> + </variablelist> + </refsect1> + + <refsect1> + <title>See Also</title> + + <simplelist type="inline"> + <member><xref linkend="sql-createtrigger"></member> + </simplelist> </refsect1> </refentry>