PostgreSQL 9.4.4 中文手册
上一页 | 上一级 | 附录 F. 额外提供的模块 | 下一页

# F.38. tcn

`tcn`模块提供了一个触发器函数，通知监听器它附着的任何表有修改。 它必须作为一个`AFTER`触发器`FOR EACH ROW`使用。

在一个`CREATE TRIGGER`语句中只需要提供一个参数到函数，并且是可选的。 如果提供了，它将用于通知的通道名。如果省略了，`tcn`将用作通道名。

通知的负载包括表名、一个表明执行了什么操作类型的字母和主键字段的字段名/值对。 每个部分用一个逗号分隔开。为了使正则表达式的分析简单化，表和字段名总是包含在双引号中， 数据值总是包含在单引号中。双引号里的引号需要写两次。

使用该扩展的一个简单的例子如下所示。

    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.

上一页 | 起始页 | 下一页
tablefunc | 上一级 | test_decoding