バージョンごとのドキュメント一覧

F.44. tcn — テーブルの内容の変更を監視者に通知するトリガ関数 #

<title>tcn &mdash; a trigger function to notify listeners of changes to table content</title>

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>. tcnモジュールは関連づけされたテーブル上の変更を監視者に通知するトリガ関数を提供します。 これはFOR EACH ROWAFTERトリガとして使用しなければなりません。

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. このモジュールはtrustedと見なされます。つまり、現在のデータベースに対してCREATE権限を持つ非スーパーユーザがインストールできます。

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. CREATE TRIGGER文の中で与えることができるパラメータは1つしかありませんが、省略することができます。 与えられた場合、それは通知のチャネル名として使用されます。 省略された場合はチャネル名としてtcnが使用されます。

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. 通知のペイロードにはテーブル名、どのような種類の操作が行われたかを示す文字、主キー列における列名と値の組み合わせが含まれます。 部位はそれぞれカンマで区切られています。 正規表現を使用して簡単に解析するために、テーブル名と列名は常に二重引用符で括られ、またデータ値は常に単一引用符で括られています。 内部に含まれる引用符は二重化されます。

A brief example of using the extension follows. この拡張を使用する簡単な例を以下に示します。

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.