On Sun, Jun 22, 2014 at 12:19:49PM -0700, Jeff Davis wrote:
> On Sat, 2014-06-21 at 14:21 +0000, Kevin Grittner wrote:
> > Fix documentation template for CREATE TRIGGER.
> >
> > By using curly braces, the template had specified that one of
> > "NOT DEFERRABLE", "INITIALLY IMMEDIATE", or "INITIALLY DEFERRED"
> > was required on any CREATE TRIGGER statement, which is not
> > accurate. Change to square brackets makes that optional.
> >
> > Backpatch to 9.1, where the error was introduced.
>
> It still doesn't look quite right to me. The new form:
>
> [ NOT DEFERRABLE | [ DEFERRABLE ] { INITIALLY IMMEDIATE | INITIALLY
> DEFERRED } ]
>
> says that, if DEFERRABLE is specified, then INITIALLY IMMEDIATE or
> INITIALLY DEFERRED is required. But the following is accepted by the
> server:
>
> create constraint trigger mytrigger
> after insert on dummy_table deferrable
> for each row execute procedure dummy_trigger();
>
> (Although the standard doesn't seem to have deferrable triggers, that
> does seem to match the deferrable constraint syntax that is in the
> spec.)
>
> For that matter, the following is also accepted by the server:
>
> create constraint trigger mytrigger
> after insert on dummy_table initially deferred deferrable
> for each row execute procedure dummy_trigger();
>
> That case may be a bug; and regardless I don't think we want to
> document/encourage specifying them in that order. But the first case
> seems reasonable to me.
I agree with both statements so I have applied the attached doc patch to
head.
--
Bruce Momjian <[email protected]> http://momjian.us
EnterpriseDB http://enterprisedb.com
+ Everyone has their own god. +
diff --git a/doc/src/sgml/ref/create_trigger.sgml b/doc/src/sgml/ref/create_trigger.sgml
new file mode 100644
index 29b815c..aae0b41
*** a/doc/src/sgml/ref/create_trigger.sgml
--- b/doc/src/sgml/ref/create_trigger.sgml
*************** PostgreSQL documentation
*** 24,30 ****
CREATE [ CONSTRAINT ] TRIGGER <replaceable class="PARAMETER">name</replaceable> { BEFORE | AFTER | INSTEAD OF } { <replaceable class="PARAMETER">event</replaceable> [ OR ... ] }
ON <replaceable class="PARAMETER">table_name</replaceable>
[ FROM <replaceable class="parameter">referenced_table_name</replaceable> ]
! [ NOT DEFERRABLE | [ DEFERRABLE ] { INITIALLY IMMEDIATE | INITIALLY DEFERRED } ]
[ FOR [ EACH ] { ROW | STATEMENT } ]
[ WHEN ( <replaceable class="parameter">condition</replaceable> ) ]
EXECUTE PROCEDURE <replaceable class="PARAMETER">function_name</replaceable> ( <replaceable class="PARAMETER">arguments</replaceable> )
--- 24,30 ----
CREATE [ CONSTRAINT ] TRIGGER <replaceable class="PARAMETER">name</replaceable> { BEFORE | AFTER | INSTEAD OF } { <replaceable class="PARAMETER">event</replaceable> [ OR ... ] }
ON <replaceable class="PARAMETER">table_name</replaceable>
[ FROM <replaceable class="parameter">referenced_table_name</replaceable> ]
! [ NOT DEFERRABLE | [ DEFERRABLE ] [ INITIALLY IMMEDIATE | INITIALLY DEFERRED ] ]
[ FOR [ EACH ] { ROW | STATEMENT } ]
[ WHEN ( <replaceable class="parameter">condition</replaceable> ) ]
EXECUTE PROCEDURE <replaceable class="PARAMETER">function_name</replaceable> ( <replaceable class="PARAMETER">arguments</replaceable> )
--
Sent via pgsql-committers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-committers