# 创建订阅
CREATE SUBSCRIPTION — 定义一个新的订阅
# 概要
CREATE SUBSCRIPTION subscription_name
CONNECTION 'conninfo'
PUBLICATION publication_name [, ...]
[ WITH ( subscription_parameter [= value] [, ... ] ) ]
# 描述
创建订阅
为当前数据库添加新订阅。订阅名称必须不同于数据库中任何现有订阅的名称。
订阅表示与发布者的复制连接。因此,此命令不仅在本地目录中添加定义,而且还在发布者上创建了一个复制槽。
在运行此命令的事务提交时,将启动逻辑复制工作者以复制新订阅的数据。
有关订阅和整个逻辑复制的更多信息,请访问第 31.2 节和第 31 章.
# 参数
订阅名称
新订阅的名称。
联系 '*
资讯*'
发布者的连接字符串。详情见第 34.1.1 节.
出版物 *
出版物名称*
要订阅的发布者上的发布的名称。
和 ( *
订阅参数* [= *
价值*] [, ... ])
此子句指定订阅的可选参数。支持以下参数:
复制数据
(布尔值
)
指定在复制开始后是否应复制正在订阅的发布中的现有数据。默认是真的
.
create_slot
(布尔值
)
指定命令是否应在发布者上创建复制槽。默认是真的
.
启用
(布尔值
)
指定订阅是否应该主动复制,或者它是否应该只是设置但尚未启动。默认是真的
.
槽名
(细绳
)
要使用的复制槽的名称。默认行为是使用订阅名称作为插槽名称。
什么时候槽名
被设定为没有
,将没有与订阅关联的复制槽。如果稍后将手动创建复制槽,则可以使用此选项。此类订阅还必须同时具有启用
和create_slot
调成错误的
.
同步提交
(枚举
)
此参数的值覆盖同步_犯罪此订阅的应用工作进程中的设置。默认值为离开
.
使用安全离开
对于逻辑复制:如果订阅者因为缺少同步而丢失事务,数据将从发布者再次发送。
执行同步逻辑复制时,可能需要使用不同的设置。逻辑复制工作者向发布者报告写入和刷新的位置,当使用同步复制时,发布者将等待实际的刷新。这意味着设置同步提交
为订阅者离开
当订阅用于同步复制时可能会增加延迟犯罪
在出版商上。在这种情况下,设置同步提交
到当地的
或更高。
二进制
(布尔值
)
指定订阅是否将请求发布者以二进制格式(而不是文本)发送数据。默认是错误的
.即使启用此选项,也只有具有二进制发送和接收功能的数据类型才会以二进制形式传输。
在进行跨版本复制时,可能会发生发布者对某些数据类型具有二进制发送功能,而订阅者缺少该类型的二进制接收功能的情况。在这种情况下,数据传输将失败,并且二进制
选项不能使用。
连接
(布尔值
)
指定是否创建订阅
应该完全连接到发布者。将此设置为错误的
将更改默认值启用
,create_slot
和复制数据
到错误的
.
不允许合并连接
设置错误的
和启用
,create_slot
, 或者复制数据
设置真的
.
由于当此选项设置为时没有建立连接错误的
, 表没有被订阅,因此在启用订阅后不会复制任何内容。需要运行更改订阅...刷新发布
为了订阅表。
流媒体
(布尔值
)
指定是否应为此订阅启用正在进行的事务的流式传输。默认情况下,所有事务都在发布者上完全解码,然后才作为一个整体发送给订阅者。
# 笔记
看第 31.7 节有关如何配置订阅和发布实例之间的访问控制的详细信息。
创建复制槽时(默认行为),创建订阅
无法在事务块内执行。
只有在复制槽不是作为同一命令的一部分创建的情况下,才能成功创建连接到同一数据库集群的订阅(例如,在同一集群中的数据库之间复制或在同一数据库中复制)。否则创建订阅
电话挂断了。要实现这一点,请单独创建复制插槽(使用函数pg_创建_逻辑_复制_插槽
使用插件名PG输出
)并使用参数创建订阅create_slot=false
。这是一个可能在未来版本中取消的实施限制。
# 例子
创建对远程服务器的订阅,以复制发布中的表我的出版物
和仅插入
并在提交时立即开始复制:
CREATE SUBSCRIPTION mysub
CONNECTION 'host=192.168.1.50 port=5432 user=foo dbname=foodb'
PUBLICATION mypublication, insert_only;
创建对远程服务器的订阅,以复制仅插入
发布,并在以后启用之前不会开始复制。
CREATE SUBSCRIPTION mysub
CONNECTION 'host=192.168.1.50 port=5432 user=foo dbname=foodb'
PUBLICATION insert_only
WITH (enabled = false);
# 兼容性
创建订阅
是一个PostgreSQL扩展。