Commit a6496a23 authored by Peter Eisentraut's avatar Peter Eisentraut

Update compatibility information.

parent 698a5d50
<!--
$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>
<refsect1 id="SQL-CREATETRIGGER-notes">
<title>Notes</title>
<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.
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, STATEMENT triggers are not implemented.
As of the current release, <literal>STATEMENT</literal> triggers are not implemented.
</para>
<para>
Refer to <command>DROP TRIGGER</command> for information on how to
remove triggers.
Refer to the <xref linkend="sql-droptrigger"> command for
information on how to remove triggers.
</para>
</refsect2>
</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>
</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>.
</programlisting>
</para>
<para>
The second example above may also be done by using a FOREIGN KEY
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>
</programlisting>
</para>
</refsect2>
</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>
......
<!--
$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.
</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.
user must be the owner of the table for which the trigger is defined.
</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>
<variablelist>
<varlistentry>
<term>SQL92</term>
<listitem>
<para>
There is no <command>DROP TRIGGER</command> statement in
<acronym>SQL92</acronym>.
</para>
</refsect2>
</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>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment