逻辑解码的SQL接口

本文介绍了逻辑解码的SQL接口。

简介

与逻辑解码互动的SQL层API如下表所示。

复制管理函数

下表展示的函数用于控制以及与复制特性交互。复制原点函数的使用仅限于超级用户,复制槽的函数只限于超级用户和拥有REPLICATION权限的用户。

表 1 复制管理函数

函数

描述

pg_create_physical_replication_slot ( slot_name name [, immediately_reserve boolean, temporary boolean ] ) → record ( slot_name name, lsn pg_lsn )

创建一个新的名为slot_name的物理复制槽。 第二个参数是可选的,当它为true时,立即为这个物理槽指定要被保留的LSN。 否则该LSN会被保留在来自一个流复制客户端的第一个连接上。 来自一个物理槽的流改变只可能出现在使用流复制协议时 — 见第 52.4 节。 当可选的第三参数temporary被设置为真时,指定那个槽不会被持久地存储在磁盘上并且仅对当前会话的使用有意义。 临时槽也会在发生任何错误时被释放。这个函数对应于复制协议命令CREATE_REPLICATION_SLOT ... PHYSICAL

pg_drop_replication_slot ( slot_name name ) → void

丢弃名为slot_name的物理或逻辑复制槽。 和复制协议命令DROP_REPLICATION_SLOT相同。对于逻辑槽, 在连接到在其中创建该槽的同一个数据库时,必须调用这个函数。

pg_create_logical_replication_slot ( slot_name name, plugin name [, temporary boolean ] ) → record ( slot_name name, lsn pg_lsn )

使用输出插件plugin创建一个名字为slot_name的新逻辑(解码)复制槽。 当可选的第三参数temporary被设置为真时,指定那个槽不会被持久地存储在磁盘上并且仅对当前会话的使用有意义。 临时槽也会在发生任何错误时被释放。对这个函数的调用与复制协议命令CREATE_REPLICATION_SLOT ... LOGICAL

pg_copy_physical_replication_slot ( src_slot_name name, dst_slot_name name [, temporary boolean ] ) → record ( slot_name name, lsn pg_lsn )

将一个名为src_slot_name的现有物理复制槽复制到一个名为dst_slot_name的物理复制槽。 被复制的物理槽开始从与源槽相同的LSN开始保留WAL。temporary是可选的。 如果省略了temporary,则使用与源槽相同的值。

pg_copy_logical_replication_slot ( src_slot_name name, dst_slot_name name [, temporary boolean [, plugin name ]] ) → record ( slot_name name, lsn pg_lsn )

复制一个名为src_slot_name的现有逻辑复制槽到一个名为dst_slot_name的逻辑复制槽,选择性的改变输出插件和持久性。 被复制的逻辑槽从与源逻辑槽相同的LSN开始。temporaryplugin都是可选的。 如果它们被省略了,使用与源逻辑槽相同的值。

pg_logical_slot_get_changes ( slot_name name, upto_lsn pg_lsn, upto_nchanges integer, VARIADIC options text[] ) → setof record ( lsn pg_lsn, xid xid, data text )

返回槽slot_name中的改变,从最后一次使用更改的点开始。 如果upto_lsnupto_nchanges为 NULL,逻辑解码将一直继续到 WAL 的末尾。 如果upto_lsn为非 NULL,解码将只包括那些在指定 LSN 之前提交的事务。 如果upto_nchanges为非 NULL,解码将在其产生的行数超过指定值后停止。 不过要注意,被返回的实际行数可能更大,因为对这个限制的检查只会在增加了解码每个新的提交事务产生的行之后进行。

pg_logical_slot_peek_changes ( slot_name name, upto_lsn pg_lsn, upto_nchanges integer, VARIADIC options text[] ) → setof record ( lsn pg_lsn, xid xid, data text )

行为就像pg_logical_slot_get_changes()函数, 不过改变不会被消费, 即在未来的调用中还会返回这些改变。

pg_logical_slot_get_binary_changes ( slot_name name, upto_lsn pg_lsn, upto_nchanges integer, VARIADIC options text[] ) → setof record ( lsn pg_lsn, xid xid, data bytea )

行为就像pg_logical_slot_get_changes()函数, 不过改变会以bytea返回。

pg_logical_slot_peek_binary_changes ( slot_name name, upto_lsn pg_lsn, upto_nchanges integer, VARIADIC options text[] ) → setof record ( lsn pg_lsn, xid xid, data bytea )

行为就像pg_logical_slot_peek_changes()函数,不过改变会以bytea返回。

pg_replication_slot_advance ( slot_name name, upto_lsn pg_lsn ) → record ( slot_name name, end_lsn pg_lsn )

将复制槽的当前确认的位置提前到名为slot_name的复制槽的当前确认位置。 该槽不会向后移动,也不会移动到当前插入位置之外。返回该槽的名称和它被推进到的真实位置。 如果有任何进展,则在下一个检查点中写出更新后的槽位置信息。所以如果发生崩溃,该槽位可能会返回到之前的位置。

pg_replication_origin_create ( node_name text ) → oid

用给定的外部名称创建一个复制源,并且返回分配给它的内部 ID。

pg_replication_origin_drop ( node_name text ) → void

删除一个以前创建的复制源,包括任何相关的重放进度。

pg_replication_origin_oid ( node_name text ) → oid

根据名称查找复制源并返回内部ID。如果没有发现这样的复制源,则抛出错误。

pg_replication_origin_session_setup ( node_name text ) → void

将当前会话标记为从给定的原点回放,从而允许跟踪回放进度。 只能在当前没有选择原点时使用。使用pg_replication_origin_session_reset 命令来撤销。

pg_replication_origin_session_reset () → void

取消pg_replication_origin_session_setup()的效果。

pg_replication_origin_session_is_setup () → boolean

如果在当前会话中选择了复制源则返回真。

pg_replication_origin_session_progress ( flush boolean ) → pg_lsn

返回当前会话中选择的复制源的重放位置。参数flush决定对应的本地事务是否被确保已经刷入磁盘。

pg_replication_origin_xact_setup ( origin_lsn pg_lsn, origin_timestamp timestamp with time zone ) → void

将当前事务标记为重放在给定LSN和时间戳上提交的事务。 只能在使用pg_replication_origin_session_setup选择复制源时调用。

pg_replication_origin_xact_reset () → void

取消pg_replication_origin_xact_setup()的效果。

pg_replication_origin_advance ( node_name text, lsn pg_lsn ) → void

将给定节点的复制进度设置为给定的位置。这主要用于设置初始位置,或在配置更改或类似的变更后设置新位置。 请注意这个函数的不当使用可能会导致不一致的复制数据。

pg_replication_origin_progress ( node_name text, flush boolean ) → pg_lsn

返回给定复制元的重放位置。参数flush决定对应的本地事务是否被确保已经刷入磁盘。

pg_logical_emit_message ( transactional boolean, prefix text, content text ) → pg_lsn

pg_logical_emit_message ( transactional boolean, prefix text, content bytea ) → pg_lsn

发出逻辑解码消息。这可以被用来通过 WAL 向逻辑解码插件传递一般消息。 transactional参数指定该消息是否应该是当前事务的一部分或者当逻辑解码读到该记录时该消息是否应该被立刻写入并且解码。 prefix参数是逻辑解码插件可以用来识别它们感兴趣的消息的文本前缀。 content是消息的文本,以文本或二进制形式给出。

同步复制只在使用流复制接口的复制槽上支持。函数接口以及额外的、非核心的接口不支持同步复制。