Skip to content

Commit 0a63f99

Browse files
committed
Change PROCEDURE to FUNCTION in CREATE TRIGGER syntax
Since procedures are now a different thing from functions, change the CREATE TRIGGER and CREATE EVENT TRIGGER syntax to use FUNCTION in the clause that specifies the function. PROCEDURE is still accepted for compatibility. pg_dump and ruleutils.c output is not changed yet, because that would require 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 parent d127828 commit 0a63f99

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 EXECUTE PROCEDURE measurement_insert_trigger();
3583+
FOR EACH ROW EXECUTE FUNCTION 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-
EXECUTE PROCEDURE noddl();
1047+
EXECUTE FUNCTION noddl();
10481048
</programlisting>
10491049
</para>
10501050

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

11301130
CREATE EVENT TRIGGER no_rewrite_allowed
11311131
ON table_rewrite
1132-
EXECUTE PROCEDURE no_rewrite();
1132+
EXECUTE FUNCTION 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 EXECUTE PROCEDURE suppress_redundant_updates_trigger();
20597+
FOR EACH ROW EXECUTE FUNCTION 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-
EXECUTE PROCEDURE test_event_trigger_for_drops();
20849+
EXECUTE FUNCTION 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-
EXECUTE PROCEDURE test_event_trigger_table_rewrite_oid();
20914+
EXECUTE FUNCTION 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>EXECUTE PROCEDURE
5796+
<literal>EXECUTE FUNCTION
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 EXECUTE PROCEDURE lo_manage(raster);
73+
FOR EACH ROW EXECUTE FUNCTION 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 EXECUTE PROCEDURE valid_id();
1303+
FOR EACH ROW EXECUTE FUNCTION 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-
EXECUTE PROCEDURE perlsnitch();
1353+
EXECUTE FUNCTION 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 EXECUTE PROCEDURE emp_stamp();
4072+
FOR EACH ROW EXECUTE FUNCTION 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 EXECUTE PROCEDURE process_emp_audit();
4127+
FOR EACH ROW EXECUTE FUNCTION 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 EXECUTE PROCEDURE update_emp_view();
4206+
FOR EACH ROW EXECUTE FUNCTION 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 EXECUTE PROCEDURE maint_sales_summary_bytime();
4351+
FOR EACH ROW EXECUTE FUNCTION 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 EXECUTE PROCEDURE process_emp_audit();
4428+
FOR EACH STATEMENT EXECUTE FUNCTION 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 EXECUTE PROCEDURE process_emp_audit();
4432+
FOR EACH STATEMENT EXECUTE FUNCTION 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 EXECUTE PROCEDURE process_emp_audit();
4436+
FOR EACH STATEMENT EXECUTE FUNCTION 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 EXECUTE PROCEDURE snitch();
4501+
CREATE EVENT TRIGGER snitch ON ddl_command_start EXECUTE FUNCTION 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 EXECUTE PROCEDURE trigfunc_modcount('modcnt');
792+
FOR EACH ROW EXECUTE FUNCTION 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 EXECUTE PROCEDURE tclsnitch();
855+
CREATE EVENT TRIGGER tcl_a_snitch ON ddl_command_start EXECUTE FUNCTION 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-
EXECUTE PROCEDURE abort_any_command();
147+
EXECUTE FUNCTION 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-
EXECUTE PROCEDURE check_account_update();
566+
EXECUTE FUNCTION 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-
EXECUTE PROCEDURE check_account_update();
576+
EXECUTE FUNCTION 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-
EXECUTE PROCEDURE check_account_update();
587+
EXECUTE FUNCTION 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-
EXECUTE PROCEDURE log_account_update();
598+
EXECUTE FUNCTION 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-
EXECUTE PROCEDURE view_insert_row();
608+
EXECUTE FUNCTION 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-
EXECUTE PROCEDURE check_transfer_balances_to_zero();
620+
EXECUTE FUNCTION 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-
EXECUTE PROCEDURE check_matching_pairs();
632+
EXECUTE FUNCTION check_matching_pairs();
625633
</programlisting>
626634
</para>
627635

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy