diff options
Diffstat (limited to 'doc/src/sgml/tcn.sgml')
-rw-r--r-- | doc/src/sgml/tcn.sgml | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/doc/src/sgml/tcn.sgml b/doc/src/sgml/tcn.sgml new file mode 100644 index 0000000..82afe9a --- /dev/null +++ b/doc/src/sgml/tcn.sgml @@ -0,0 +1,77 @@ +<!-- 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</filename> 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</literal> trigger <literal>FOR EACH ROW</literal>. + </para> + + <para> + This module is considered <quote>trusted</quote>, that is, it can be + installed by non-superusers who have <literal>CREATE</literal> privilege + on the current database. + </para> + + <para> + Only one parameter may be supplied to the function in a + <literal>CREATE TRIGGER</literal> statement, and that is optional. If supplied + it will be used for the channel name for the notifications. If omitted + <literal>tcn</literal> 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. Embedded 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(# ); +CREATE TABLE +test=# create trigger tcndata_tcn_trigger +test-# after insert or update or delete on tcndata +test-# for each row execute function 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> |