Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit0a63f99

Browse files
committed
Change PROCEDURE to FUNCTION in CREATE TRIGGER syntax
Since procedures are now a different thing from functions, change theCREATE TRIGGER and CREATE EVENT TRIGGER syntax to use FUNCTION in theclause that specifies the function. PROCEDURE is still accepted forcompatibility.pg_dump and ruleutils.c output is not changed yet, because that wouldrequire a change in information_schema.sql and thus a catversion change.Reported-by: Peter Geoghegan <pg@bowt.ie>Reviewed-by: Jonathan S. Katz <jonathan.katz@excoventures.com>
1 parentd127828 commit0a63f99

File tree

16 files changed

+62
-41
lines changed

16 files changed

+62
-41
lines changed

‎doc/src/sgml/ddl.sgml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3580,7 +3580,7 @@ LANGUAGE plpgsql;
35803580
<programlisting>
35813581
CREATE TRIGGER insert_measurement_trigger
35823582
BEFORE INSERT ON measurement
3583-
FOR EACH ROW EXECUTEPROCEDURE measurement_insert_trigger();
3583+
FOR EACH ROW EXECUTEFUNCTION measurement_insert_trigger();
35843584
</programlisting>
35853585

35863586
We must redefine the trigger function each month so that it always

‎doc/src/sgml/event-trigger.sgml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1044,7 +1044,7 @@ CREATE FUNCTION noddl() RETURNS event_trigger
10441044
AS 'noddl' LANGUAGE C;
10451045

10461046
CREATE EVENT TRIGGER noddl ON ddl_command_start
1047-
EXECUTEPROCEDURE noddl();
1047+
EXECUTEFUNCTION noddl();
10481048
</programlisting>
10491049
</para>
10501050

@@ -1129,7 +1129,7 @@ $$;
11291129

11301130
CREATE EVENT TRIGGER no_rewrite_allowed
11311131
ON table_rewrite
1132-
EXECUTEPROCEDURE no_rewrite();
1132+
EXECUTEFUNCTION no_rewrite();
11331133
</programlisting>
11341134
</para>
11351135
</sect1>

‎doc/src/sgml/func.sgml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20594,7 +20594,7 @@ SELECT (pg_stat_file('filename')).modification;
2059420594
<programlisting>
2059520595
CREATE TRIGGER z_min_update
2059620596
BEFORE UPDATE ON tablename
20597-
FOR EACH ROW EXECUTEPROCEDURE suppress_redundant_updates_trigger();
20597+
FOR EACH ROW EXECUTEFUNCTION suppress_redundant_updates_trigger();
2059820598
</programlisting>
2059920599
In most cases, you would want to fire this trigger last for each row.
2060020600
Bearing in mind that triggers fire in name order, you would then
@@ -20846,7 +20846,7 @@ END
2084620846
$$;
2084720847
CREATE EVENT TRIGGER test_event_trigger_for_drops
2084820848
ON sql_drop
20849-
EXECUTEPROCEDURE test_event_trigger_for_drops();
20849+
EXECUTEFUNCTION test_event_trigger_for_drops();
2085020850
</programlisting>
2085120851
</para>
2085220852
</sect2>
@@ -20911,7 +20911,7 @@ $$;
2091120911

2091220912
CREATE EVENT TRIGGER test_table_rewrite_oid
2091320913
ON table_rewrite
20914-
EXECUTEPROCEDURE test_event_trigger_table_rewrite_oid();
20914+
EXECUTEFUNCTION test_event_trigger_table_rewrite_oid();
2091520915
</programlisting>
2091620916
</para>
2091720917
</sect2>

‎doc/src/sgml/information_schema.sgml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5793,7 +5793,7 @@ ORDER BY c.ordinal_position;
57935793
<entry><type>character_data</type></entry>
57945794
<entry>
57955795
Statement that is executed by the trigger (currently always
5796-
<literal>EXECUTEPROCEDURE
5796+
<literal>EXECUTEFUNCTION
57975797
<replaceable>function</replaceable>(...)</literal>)
57985798
</entry>
57995799
</row>

‎doc/src/sgml/lo.sgml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@
7070
CREATE TABLE image (title text, raster lo);
7171

7272
CREATE TRIGGER t_raster BEFORE UPDATE OR DELETE ON image
73-
FOR EACH ROW EXECUTEPROCEDURE lo_manage(raster);
73+
FOR EACH ROW EXECUTEFUNCTION lo_manage(raster);
7474
</programlisting>
7575

7676
<para>

‎doc/src/sgml/plperl.sgml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1300,7 +1300,7 @@ $$ LANGUAGE plperl;
13001300

13011301
CREATE TRIGGER test_valid_id_trig
13021302
BEFORE INSERT OR UPDATE ON test
1303-
FOR EACH ROW EXECUTEPROCEDURE valid_id();
1303+
FOR EACH ROW EXECUTEFUNCTION valid_id();
13041304
</programlisting>
13051305
</para>
13061306
</sect1>
@@ -1350,7 +1350,7 @@ $$ LANGUAGE plperl;
13501350

13511351
CREATE EVENT TRIGGER perl_a_snitch
13521352
ON ddl_command_start
1353-
EXECUTEPROCEDURE perlsnitch();
1353+
EXECUTEFUNCTION perlsnitch();
13541354
</programlisting>
13551355
</para>
13561356
</sect1>

‎doc/src/sgml/plpgsql.sgml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4069,7 +4069,7 @@ CREATE FUNCTION emp_stamp() RETURNS trigger AS $emp_stamp$
40694069
$emp_stamp$ LANGUAGE plpgsql;
40704070

40714071
CREATE TRIGGER emp_stamp BEFORE INSERT OR UPDATE ON emp
4072-
FOR EACH ROW EXECUTEPROCEDURE emp_stamp();
4072+
FOR EACH ROW EXECUTEFUNCTION emp_stamp();
40734073
</programlisting>
40744074
</example>
40754075

@@ -4124,7 +4124,7 @@ $emp_audit$ LANGUAGE plpgsql;
41244124

41254125
CREATE TRIGGER emp_audit
41264126
AFTER INSERT OR UPDATE OR DELETE ON emp
4127-
FOR EACH ROW EXECUTEPROCEDURE process_emp_audit();
4127+
FOR EACH ROW EXECUTEFUNCTION process_emp_audit();
41284128
</programlisting>
41294129
</example>
41304130

@@ -4203,7 +4203,7 @@ $$ LANGUAGE plpgsql;
42034203

42044204
CREATE TRIGGER emp_audit
42054205
INSTEAD OF INSERT OR UPDATE OR DELETE ON emp_view
4206-
FOR EACH ROW EXECUTEPROCEDURE update_emp_view();
4206+
FOR EACH ROW EXECUTEFUNCTION update_emp_view();
42074207
</programlisting>
42084208
</example>
42094209

@@ -4348,7 +4348,7 @@ $maint_sales_summary_bytime$ LANGUAGE plpgsql;
43484348

43494349
CREATE TRIGGER maint_sales_summary_bytime
43504350
AFTER INSERT OR UPDATE OR DELETE ON sales_fact
4351-
FOR EACH ROW EXECUTEPROCEDURE maint_sales_summary_bytime();
4351+
FOR EACH ROW EXECUTEFUNCTION maint_sales_summary_bytime();
43524352

43534353
INSERT INTO sales_fact VALUES(1,1,1,10,3,15);
43544354
INSERT INTO sales_fact VALUES(1,2,1,20,5,35);
@@ -4425,15 +4425,15 @@ $emp_audit$ LANGUAGE plpgsql;
44254425
CREATE TRIGGER emp_audit_ins
44264426
AFTER INSERT ON emp
44274427
REFERENCING NEW TABLE AS new_table
4428-
FOR EACH STATEMENT EXECUTEPROCEDURE process_emp_audit();
4428+
FOR EACH STATEMENT EXECUTEFUNCTION process_emp_audit();
44294429
CREATE TRIGGER emp_audit_upd
44304430
AFTER UPDATE ON emp
44314431
REFERENCING OLD TABLE AS old_table NEW TABLE AS new_table
4432-
FOR EACH STATEMENT EXECUTEPROCEDURE process_emp_audit();
4432+
FOR EACH STATEMENT EXECUTEFUNCTION process_emp_audit();
44334433
CREATE TRIGGER emp_audit_del
44344434
AFTER DELETE ON emp
44354435
REFERENCING OLD TABLE AS old_table
4436-
FOR EACH STATEMENT EXECUTEPROCEDURE process_emp_audit();
4436+
FOR EACH STATEMENT EXECUTEFUNCTION process_emp_audit();
44374437
</programlisting>
44384438
</example>
44394439

@@ -4498,7 +4498,7 @@ BEGIN
44984498
END;
44994499
$$ LANGUAGE plpgsql;
45004500

4501-
CREATE EVENT TRIGGER snitch ON ddl_command_start EXECUTEPROCEDURE snitch();
4501+
CREATE EVENT TRIGGER snitch ON ddl_command_start EXECUTEFUNCTION snitch();
45024502
</programlisting>
45034503
</example>
45044504
</sect2>

‎doc/src/sgml/pltcl.sgml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -789,7 +789,7 @@ $$ LANGUAGE pltcl;
789789
CREATE TABLE mytab (num integer, description text, modcnt integer);
790790

791791
CREATE TRIGGER trig_mytab_modcount BEFORE INSERT OR UPDATE ON mytab
792-
FOR EACH ROW EXECUTEPROCEDURE trigfunc_modcount('modcnt');
792+
FOR EACH ROW EXECUTEFUNCTION trigfunc_modcount('modcnt');
793793
</programlisting>
794794

795795
Notice that the trigger function itself does not know the column
@@ -852,7 +852,7 @@ CREATE OR REPLACE FUNCTION tclsnitch() RETURNS event_trigger AS $$
852852
elog NOTICE "tclsnitch: $TG_event $TG_tag"
853853
$$ LANGUAGE pltcl;
854854

855-
CREATE EVENT TRIGGER tcl_a_snitch ON ddl_command_start EXECUTEPROCEDURE tclsnitch();
855+
CREATE EVENT TRIGGER tcl_a_snitch ON ddl_command_start EXECUTEFUNCTION tclsnitch();
856856
</programlisting>
857857
</para>
858858
</sect1>

‎doc/src/sgml/ref/create_event_trigger.sgml

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ PostgreSQL documentation
2424
CREATE EVENT TRIGGER <replaceable class="parameter">name</replaceable>
2525
ON <replaceable class="parameter">event</replaceable>
2626
[ WHEN <replaceable class="parameter">filter_variable</replaceable> IN (filter_value [, ... ]) [ AND ... ] ]
27-
EXECUTE PROCEDURE <replaceable class="parameter">function_name</replaceable>()
27+
EXECUTE{ FUNCTION |PROCEDURE } <replaceable class="parameter">function_name</replaceable>()
2828
</synopsis>
2929
</refsynopsisdiv>
3030

@@ -98,6 +98,14 @@ CREATE EVENT TRIGGER <replaceable class="parameter">name</replaceable>
9898
A user-supplied function that is declared as taking no argument and
9999
returning type <literal>event_trigger</literal>.
100100
</para>
101+
102+
<para>
103+
In the syntax of <literal>CREATE EVENT TRIGGER</literal>, the keywords
104+
<literal>FUNCTION</literal> and <literal>PROCEDURE</literal> are
105+
equivalent, but the referenced function must in any case be a function,
106+
not a procedure. The use of the keyword <literal>PROCEDURE</literal>
107+
here is historical and deprecated.
108+
</para>
101109
</listitem>
102110
</varlistentry>
103111

@@ -136,7 +144,7 @@ END;
136144
$$;
137145

138146
CREATE EVENT TRIGGER abort_ddl ON ddl_command_start
139-
EXECUTEPROCEDURE abort_any_command();
147+
EXECUTEFUNCTION abort_any_command();
140148
</programlisting></para>
141149
</refsect1>
142150

‎doc/src/sgml/ref/create_trigger.sgml

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ CREATE [ CONSTRAINT ] TRIGGER <replaceable class="parameter">name</replaceable>
3333
[ REFERENCING { { OLD | NEW } TABLE [ AS ] <replaceable class="parameter">transition_relation_name</replaceable> } [ ... ] ]
3434
[ FOR [ EACH ] { ROW | STATEMENT } ]
3535
[ WHEN ( <replaceable class="parameter">condition</replaceable> ) ]
36-
EXECUTE PROCEDURE <replaceable class="parameter">function_name</replaceable> ( <replaceable class="parameter">arguments</replaceable> )
36+
EXECUTE{ FUNCTION |PROCEDURE } <replaceable class="parameter">function_name</replaceable> ( <replaceable class="parameter">arguments</replaceable> )
3737

3838
<phrase>where <replaceable class="parameter">event</replaceable> can be one of:</phrase>
3939

@@ -401,6 +401,14 @@ UPDATE OF <replaceable>column_name1</replaceable> [, <replaceable>column_name2</
401401
and returning type <literal>trigger</literal>, which is executed when
402402
the trigger fires.
403403
</para>
404+
405+
<para>
406+
In the syntax of <literal>CREATE TRIGGER</literal>, the keywords
407+
<literal>FUNCTION</literal> and <literal>PROCEDURE</literal> are
408+
equivalent, but the referenced function must in any case be a function,
409+
not a procedure. The use of the keyword <literal>PROCEDURE</literal>
410+
here is historical and deprecated.
411+
</para>
404412
</listitem>
405413
</varlistentry>
406414

@@ -555,7 +563,7 @@ UPDATE OF <replaceable>column_name1</replaceable> [, <replaceable>column_name2</
555563
CREATE TRIGGER check_update
556564
BEFORE UPDATE ON accounts
557565
FOR EACH ROW
558-
EXECUTEPROCEDURE check_account_update();
566+
EXECUTEFUNCTION check_account_update();
559567
</programlisting>
560568

561569
The same, but only execute the function if column <literal>balance</literal>
@@ -565,7 +573,7 @@ CREATE TRIGGER check_update
565573
CREATE TRIGGER check_update
566574
BEFORE UPDATE OF balance ON accounts
567575
FOR EACH ROW
568-
EXECUTEPROCEDURE check_account_update();
576+
EXECUTEFUNCTION check_account_update();
569577
</programlisting>
570578

571579
This form only executes the function if column <literal>balance</literal>
@@ -576,7 +584,7 @@ CREATE TRIGGER check_update
576584
BEFORE UPDATE ON accounts
577585
FOR EACH ROW
578586
WHEN (OLD.balance IS DISTINCT FROM NEW.balance)
579-
EXECUTEPROCEDURE check_account_update();
587+
EXECUTEFUNCTION check_account_update();
580588
</programlisting>
581589

582590
Call a function to log updates of <literal>accounts</literal>, but only if
@@ -587,7 +595,7 @@ CREATE TRIGGER log_update
587595
AFTER UPDATE ON accounts
588596
FOR EACH ROW
589597
WHEN (OLD.* IS DISTINCT FROM NEW.*)
590-
EXECUTEPROCEDURE log_account_update();
598+
EXECUTEFUNCTION log_account_update();
591599
</programlisting>
592600

593601
Execute the function <function>view_insert_row</function> for each row to insert
@@ -597,7 +605,7 @@ CREATE TRIGGER log_update
597605
CREATE TRIGGER view_insert
598606
INSTEAD OF INSERT ON my_view
599607
FOR EACH ROW
600-
EXECUTEPROCEDURE view_insert_row();
608+
EXECUTEFUNCTION view_insert_row();
601609
</programlisting>
602610

603611
Execute the function <function>check_transfer_balances_to_zero</function> for each
@@ -609,7 +617,7 @@ CREATE TRIGGER transfer_insert
609617
AFTER INSERT ON transfer
610618
REFERENCING NEW TABLE AS inserted
611619
FOR EACH STATEMENT
612-
EXECUTEPROCEDURE check_transfer_balances_to_zero();
620+
EXECUTEFUNCTION check_transfer_balances_to_zero();
613621
</programlisting>
614622

615623
Execute the function <function>check_matching_pairs</function> for each row to
@@ -621,7 +629,7 @@ CREATE TRIGGER paired_items_update
621629
AFTER UPDATE ON paired_items
622630
REFERENCING NEW TABLE AS newtab OLD TABLE AS oldtab
623631
FOR EACH ROW
624-
EXECUTEPROCEDURE check_matching_pairs();
632+
EXECUTEFUNCTION check_matching_pairs();
625633
</programlisting>
626634
</para>
627635

‎doc/src/sgml/tcn.sgml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ test(# );
4747
CREATE TABLE
4848
test=# create trigger tcndata_tcn_trigger
4949
test-# after insert or update or delete on tcndata
50-
test-# for each row executeprocedure triggered_change_notification();
50+
test-# for each row executefunction triggered_change_notification();
5151
CREATE TRIGGER
5252
test=# listen tcn;
5353
LISTEN

‎doc/src/sgml/textsearch.sgml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1884,7 +1884,7 @@ CREATE TABLE messages (
18841884
);
18851885

18861886
CREATE TRIGGER tsvectorupdate BEFORE INSERT OR UPDATE
1887-
ON messages FOR EACH ROW EXECUTEPROCEDURE
1887+
ON messages FOR EACH ROW EXECUTEFUNCTION
18881888
tsvector_update_trigger(tsv, 'pg_catalog.english', title, body);
18891889

18901890
INSERT INTO messages VALUES('title here', 'the body text is here');
@@ -1940,7 +1940,7 @@ end
19401940
$$ LANGUAGE plpgsql;
19411941

19421942
CREATE TRIGGER tsvectorupdate BEFORE INSERT OR UPDATE
1943-
ON messages FOR EACH ROW EXECUTEPROCEDURE messages_trigger();
1943+
ON messages FOR EACH ROW EXECUTEFUNCTION messages_trigger();
19441944
</programlisting>
19451945
</para>
19461946

‎doc/src/sgml/trigger.sgml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -871,10 +871,10 @@ CREATE FUNCTION trigf() RETURNS trigger
871871
LANGUAGE C;
872872

873873
CREATE TRIGGER tbefore BEFORE INSERT OR UPDATE OR DELETE ON ttest
874-
FOR EACH ROW EXECUTEPROCEDURE trigf();
874+
FOR EACH ROW EXECUTEFUNCTION trigf();
875875

876876
CREATE TRIGGER tafter AFTER INSERT OR UPDATE OR DELETE ON ttest
877-
FOR EACH ROW EXECUTEPROCEDURE trigf();
877+
FOR EACH ROW EXECUTEFUNCTION trigf();
878878
</programlisting>
879879
</para>
880880

‎src/backend/parser/gram.y

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5344,7 +5344,7 @@ CreateAmStmt: CREATE ACCESS METHOD name TYPE_P INDEX HANDLER handler_name
53445344
CreateTrigStmt:
53455345
CREATETRIGGERnameTriggerActionTimeTriggerEventsON
53465346
qualified_nameTriggerReferencingTriggerForSpecTriggerWhen
5347-
EXECUTEPROCEDUREfunc_name'('TriggerFuncArgs')'
5347+
EXECUTEFUNCTION_or_PROCEDUREfunc_name'('TriggerFuncArgs')'
53485348
{
53495349
CreateTrigStmt *n = makeNode(CreateTrigStmt);
53505350
n->trigname =$3;
@@ -5366,7 +5366,7 @@ CreateTrigStmt:
53665366
|CREATECONSTRAINTTRIGGERnameAFTERTriggerEventsON
53675367
qualified_nameOptConstrFromTableConstraintAttributeSpec
53685368
FOREACHROWTriggerWhen
5369-
EXECUTEPROCEDUREfunc_name'('TriggerFuncArgs')'
5369+
EXECUTEFUNCTION_or_PROCEDUREfunc_name'('TriggerFuncArgs')'
53705370
{
53715371
CreateTrigStmt *n = makeNode(CreateTrigStmt);
53725372
n->trigname =$4;
@@ -5504,6 +5504,11 @@ TriggerWhen:
55045504
|/*EMPTY*/{$$ =NULL; }
55055505
;
55065506

5507+
FUNCTION_or_PROCEDURE:
5508+
FUNCTION
5509+
|PROCEDURE
5510+
;
5511+
55075512
TriggerFuncArgs:
55085513
TriggerFuncArg{$$ = list_make1($1); }
55095514
|TriggerFuncArgs','TriggerFuncArg{$$ = lappend($1,$3); }

‎src/test/regress/expected/triggers.out

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@ create unique index pkeys_i on pkeys (pkey1, pkey2);
2222
create trigger check_fkeys_pkey_exist
2323
before insert or update on fkeys
2424
for each row
25-
executeprocedure
25+
executefunction
2626
check_primary_key ('fkey1', 'fkey2', 'pkeys', 'pkey1', 'pkey2');
2727
create trigger check_fkeys_pkey2_exist
2828
before insert or update on fkeys
2929
for each row
30-
executeprocedure check_primary_key ('fkey3', 'fkeys2', 'pkey23');
30+
executefunction check_primary_key ('fkey3', 'fkeys2', 'pkey23');
3131
--
3232
-- For fkeys2:
3333
-- (fkey21, fkey22)--> pkeys (pkey1, pkey2)

‎src/test/regress/sql/triggers.sql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,13 @@ create unique index pkeys_i on pkeys (pkey1, pkey2);
2626
createtriggercheck_fkeys_pkey_exist
2727
before insertorupdateon fkeys
2828
for each row
29-
executeprocedure
29+
executefunction
3030
check_primary_key ('fkey1','fkey2','pkeys','pkey1','pkey2');
3131

3232
createtriggercheck_fkeys_pkey2_exist
3333
before insertorupdateon fkeys
3434
for each row
35-
executeprocedure check_primary_key ('fkey3','fkeys2','pkey23');
35+
executefunction check_primary_key ('fkey3','fkeys2','pkey23');
3636

3737
--
3838
-- For fkeys2:

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp