PostgreSQL 9.3.2文書 | ||||
---|---|---|---|---|
前のページ | 上に戻る | 付録 F. 追加で提供されるモジュール | 次のページ |
tcnモジュールは 関連づけさせた任意のテーブル上の変更を監視者に通知するトリガ関数を提供します。 これはFOR EACH ROWのAFTERトリガとして使用しなければなりません。
CREATE TRIGGER文の中で与えることができるパラメータは1つしかありませんが、省略することができます。 与えられた場合、それは通知のチャネル名として使用されます。 省略された場合はチャネル名としてtcnが使用されます。
通知のペイロードにはテーブル名、どのようなsy類の操作が行われたかを示す文章、プライマリキー列における列名と値の組み合わせが含まれます。 部位はそれぞれカンマで区切られています。 正規表現を使用して簡単に解析するために、テーブル名と列名は常に二重引用符で括られ、またデータ値は常に単一引用府で括られています。 内部に含まれる引用府は二重化されます。
この拡張を使用する簡単な例を以下に示します。
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 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.