CREATE PUBLICATION

创建出版物-定义新出版物

Synopsis

CREATE PUBLICATION name
    [ FOR TABLE [ ONLY ] table_name [ * ] [, ...]
      | FOR ALL TABLES ]
    [ WITH ( publication_parameter [= value] [, ... ] ) ]

Description

CREATE PUBLICATION将新的出版物添加到当前数据库中。发布名称必须不同于当前数据库中任何现有发布的名称。

发布实际上是一组表,其数据更改旨在通过逻辑复制进行复制。有关发布如何适合逻辑复制设置的详细信息,请参见Section 31.1

Parameters

  • name

    • 新出版物的名称。
  • FOR TABLE

    • 指定要添加到发布的表的列表。如果在表名之前指定了ONLY,则仅将该表添加到发布中。如果未指定ONLY,则会添加该表及其所有后代表(如果有)。 (可选)可以在表名称后指定*,以明确指示包括后代表。

只有持久性基表可以成为发布的一部分。临时表,未记录表,外部表,物化视图,常规视图和分区表不能成为发布的一部分。若要复制分区表,请将各个分区添加到发布中。

  • FOR ALL TABLES

    • 将发布标记为可复制数据库中所有表(包括将来创建的表)的更改的发布。
  • WITH ( publication_parameter [= value] [, ... ] )

    • 此子句指定发布的可选参数。支持以下参数:
  • publish ( string )

    • 此参数确定新发布将向订阅者发布哪些 DML 操作。该值是逗号分隔的操作列表。允许的操作为insertupdatedeletetruncate。默认值为发布所有操作,因此此选项的默认值为'insert, update, delete, truncate'

Notes

如果未指定FOR TABLEFOR ALL TABLES,则发布以空表集开始。如果以后要添加表,这将很有用。

发布的创建不会启动复制。它仅为将来的订户定义了分组和过滤逻辑。

要创建发布,调用用户必须对当前数据库具有CREATE特权。 (当然,超级用户会绕过此检查.)

要将表添加到发布中,调用用户必须对该表具有所有权。 FOR ALL TABLES子句要求调用用户是超级用户。

添加到发布UPDATE和/或DELETE操作的发布中的表必须已定义REPLICA IDENTITY。否则,将禁止在这些表上执行这些操作。

对于INSERT ... ON CONFLICT命令,发布将发布该命令实际产生的操作。因此,根据结果,它可能会发布为INSERTUPDATE,或者可能根本不会发布。

COPY ... FROM命令作为INSERT操作发布。

DDL 操作未发布。

Examples

创建一个发布,将所有更改发布在两个表中:

CREATE PUBLICATION mypublication FOR TABLE users, departments;

创建一个发布以发布所有表中的所有更改的发布:

CREATE PUBLICATION alltables FOR ALL TABLES;

创建一个发布,该发布仅在一个表中发布INSERT个操作:

CREATE PUBLICATION insert_only FOR TABLE mydata
    WITH (publish = 'insert');

Compatibility

CREATE PUBLICATION是 PostgreSQL 扩展。

See Also

ALTER PUBLICATION, DROP PUBLICATION