mirror of
https://github.com/postgres/postgres.git
synced 2025-07-30 11:03:19 +03:00
Triggered change notifications.
Kevin Grittner, reviewed (in earlier versions) by Álvaro Herrera
This commit is contained in:
@ -128,6 +128,7 @@ CREATE EXTENSION <replaceable>module_name</> FROM unpackaged;
|
||||
&contrib-spi;
|
||||
&sslinfo;
|
||||
&tablefunc;
|
||||
&tcn;
|
||||
&test-parser;
|
||||
&tsearch2;
|
||||
&unaccent;
|
||||
|
@ -136,6 +136,7 @@
|
||||
<!ENTITY sepgsql SYSTEM "sepgsql.sgml">
|
||||
<!ENTITY sslinfo SYSTEM "sslinfo.sgml">
|
||||
<!ENTITY tablefunc SYSTEM "tablefunc.sgml">
|
||||
<!ENTITY tcn SYSTEM "tcn.sgml">
|
||||
<!ENTITY test-parser SYSTEM "test-parser.sgml">
|
||||
<!ENTITY tsearch2 SYSTEM "tsearch2.sgml">
|
||||
<!ENTITY unaccent SYSTEM "unaccent.sgml">
|
||||
|
72
doc/src/sgml/tcn.sgml
Normal file
72
doc/src/sgml/tcn.sgml
Normal file
@ -0,0 +1,72 @@
|
||||
<!-- doc/src/sgml/tcn.sgml -->
|
||||
|
||||
<sect1 id="tcn" xreflabel="tcn">
|
||||
<title>tcn</title>
|
||||
|
||||
<indexterm zone="tcn">
|
||||
<primary>tcn</primary>
|
||||
</indexterm>
|
||||
|
||||
<indexterm zone="tcn">
|
||||
<primary>triggered_change_notification</primary>
|
||||
</indexterm>
|
||||
|
||||
<para>
|
||||
The <filename>tcn</> module provides a trigger function that notifies
|
||||
listeners of changes to any table on which it is attached. It must be
|
||||
used as an <literal>AFTER</> trigger <literal>FOR EACH ROW</>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Only one parameter may be suupplied to the function in a
|
||||
<literal>CREATE TRIGGER</> statement, and that is optional. If supplied
|
||||
it will be used for the channel name for the notifications. If omitted
|
||||
<literal>tcn</> will be used for the channel name.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The payload of the notifications consists of the table name, a letter to
|
||||
indicate which type of operation was performed, and column name/value pairs
|
||||
for primary key columns. Each part is separated from the next by a comma.
|
||||
For ease of parsing using regular expressions, table and column names are
|
||||
always wrapped in double quotes, and data values are always wrapped in
|
||||
single quotes. Embeded quotes are doubled.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
A brief example of using the extension follows.
|
||||
|
||||
<programlisting>
|
||||
test=# create table tcndata
|
||||
test-# (
|
||||
test(# a int not null,
|
||||
test(# b date not null,
|
||||
test(# c text,
|
||||
test(# primary key (a, b)
|
||||
test(# );
|
||||
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "tcndata_pkey" for table "tcndata"
|
||||
CREATE TABLE
|
||||
test=# create trigger tcndata_tcn_trigger
|
||||
test-# after insert or update or delete on tcndata
|
||||
test-# for each row execute procedure triggered_change_notification();
|
||||
CREATE TRIGGER
|
||||
test=# listen tcn;
|
||||
LISTEN
|
||||
test=# insert into tcndata values (1, date '2012-12-22', 'one'),
|
||||
test-# (1, date '2012-12-23', 'another'),
|
||||
test-# (2, date '2012-12-23', 'two');
|
||||
INSERT 0 3
|
||||
Asynchronous notification "tcn" with payload ""tcndata",I,"a"='1',"b"='2012-12-22'" received from server process with PID 22770.
|
||||
Asynchronous notification "tcn" with payload ""tcndata",I,"a"='1',"b"='2012-12-23'" received from server process with PID 22770.
|
||||
Asynchronous notification "tcn" with payload ""tcndata",I,"a"='2',"b"='2012-12-23'" received from server process with PID 22770.
|
||||
test=# update tcndata set c = 'uno' where a = 1;
|
||||
UPDATE 2
|
||||
Asynchronous notification "tcn" with payload ""tcndata",U,"a"='1',"b"='2012-12-22'" received from server process with PID 22770.
|
||||
Asynchronous notification "tcn" with payload ""tcndata",U,"a"='1',"b"='2012-12-23'" received from server process with PID 22770.
|
||||
test=# delete from tcndata where a = 1 and b = date '2012-12-22';
|
||||
DELETE 1
|
||||
Asynchronous notification "tcn" with payload ""tcndata",D,"a"='1',"b"='2012-12-22'" received from server process with PID 22770.
|
||||
</programlisting>
|
||||
</para>
|
||||
|
||||
</sect1>
|
Reference in New Issue
Block a user