mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-10-03 01:56:54 +02:00
eb67623c96
This allows these modules to be installed into a database without superuser privileges (assuming that the DBA or sysadmin has installed the module's files in the expected place). You only need CREATE privilege on the current database, which by default would be available to the database owner. The following modules are marked trusted: btree_gin btree_gist citext cube dict_int earthdistance fuzzystrmatch hstore hstore_plperl intarray isn jsonb_plperl lo ltree pg_trgm pgcrypto seg tablefunc tcn tsm_system_rows tsm_system_time unaccent uuid-ossp In the future we might mark some more modules trusted, but there seems to be no debate about these, and on the whole it seems wise to be conservative with use of this feature to start out with. Discussion: https://postgr.es/m/32315.1580326876@sss.pgh.pa.us
78 lines
3.0 KiB
Plaintext
78 lines
3.0 KiB
Plaintext
<!-- 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>
|