-
通用选项(串行解码和并行解码均可配置,但可能无效,请参考相关选项详细说明) include-xids: 解码出的data列是否包含xid信息。 取值范围:0或1,默认值为1。 0:设为0时,解码出的data列不包含xid信息。 1:设为1时,解码出的data列包含xid信息。 skip-empty-xacts: 解码时是否忽略空事务信息。 取值范围:0或1,默认值为0。 0:设为0时,解码时不忽略空事务信息。 1:设为1时,解码时会忽略空事务信息。 include-timestamp: 解码信息是否包含commit时间戳。 取值范围:0或1,默认值为0。 0:设为0时,解码信息不包含commit时间戳。 1:设为1时,解码信息包含commit时间戳。 only-local: 是否仅解码本地日志。 取值范围:0或1,默认值为1。 0:设为0时,解码非本地日志和本地日志。 1:设为1时,仅解码本地日志。 white-table-list: 白名单参数,包含需要进行解码的schema和表名。 取值范围:包含白名单中表名的字符串,不同的表以','为分隔符进行隔离;使用'*'来模糊匹配所有情况;schema名和表名间以'.'分隔,不允许存在任意空白符。例如: select * from pg_logical_slot_peek_changes('slot1', NULL, 4096, 'white-table-list', 'public.t1,public.t2,*.t3,my_schema.*'); max-txn-in-memory: 内存管控参数,单位为MB,单个事务占用内存大于该值即进行落盘。 取值范围:0~100的整型,默认值为0,即不开启此种管控。 max-reorderbuffer-in-memory 内存管控参数,单位为GB,拼接-发送线程中正在拼接的事务总内存(包含缓存)大于该值则对当前解码事务进行落盘。 取值范围:0~100的整型,默认值为0,即不开启此种管控。 include-user: 事务的BEGIN逻辑日志是否输出事务的用户名。事务的用户名特指授权用户——执行事务对应会话的登录用户,它在事务的整个执行过程中不会发生变化。 取值范围:0或1,默认值为0。 0:设为0时,事物的BEGIN逻辑日志不输出事务的用户名。 1:设为1时,事物的BEGIN逻辑日志输出事务的用户名。 exclude-userids: 黑名单用户的OID参数。 取值范围:字符串类型,指定黑名单用户的OID,多个OID通过','分隔,不校验用户OID是否存在。 exclude-users: 黑名单用户的名称列表。 取值范围:字符串类型,指定黑名单用户名,通过','分隔,不校验用户名是否存在。 dynamic-resolution: 是否动态解析黑名单用户名。 取值范围:0或1,默认值为1。 0:设为0时,当解码观测到黑名单exclude-users中用户不存在时将会报错并退出逻辑解码。 1:设为1时,当解码观测到黑名单exclude-users中用户不存在时继续解码。 standby-connection: 仅流式解码设置,是否仅限制备机解码。 取值范围:bool型,默认值为false。 true:设为true时,仅允许连接备机解码,连接主机解码时会报错退出。 false:设为false时,不做限制,允许连接主机或备机解码。 sender-timeout: 仅流式解码设置,内核与客户端的心跳超时阈值。当该时间段内没有收到客户端任何消息时,逻辑解码将主动停止,并断开和客户端的连接。单位为毫秒(ms)。 取值范围:0~2147483647的int型,默认值取决于GUC参数logical_sender_timeout的配置值。 parallel-decode-num: 仅流式解码设置有效,并行解码的Decoder线程数量;系统函数调用场景下此选项无效,仅校验取值范围。 取值范围:取1表示按照原有的串行逻辑进行解码,取其余值表示开启并行解码,默认值为1。 当parallel-decode-num不配置(即为默认值1)或显式配置为1时,下述“并行解码”中的选项不可配置。
-
串行解码 force-binary: 是否以二进制格式输出解码结果,针对不同场景呈现不同行为。 针对系统函数pg_logical_slot_get_binary_changes和pg_logical_slot_peek_binary_changes: 取值范围:bool型,默认值为false。此值无实际意义,均以二进制格式输出解码结果。 针对系统函数pg_logical_slot_get_changes、pg_logical_slot_peek_changes和pg_logical_get_area_changes: 取值范围:仅取false值的bool型。以文本格式输出解码结果。 针对流式解码: 取值范围:bool型,默认值为false。此值无实际意义,均以文本格式输出解码结果。
-
并行解码 以下配置选项仅限流式解码设置。 decode-style: 指定解码格式。 取值范围:char型的字符'j'、't'或'b',分别代表json格式,text格式及二进制格式。默认值为'b'即二进制格式解码。 对于json格式和text格式解码,开启批量发送选项时的解码结果中,每条解码语句的前4字节组成的uint32代表该条语句总字节数(不包含该uint32类型占用的4字节,0代表本批次解码结束),8字节uint64代表相应lsn(begin对应first_lsn,commit对应end_lsn,其他场景对应该条语句的lsn)。 二进制格式编码规则如下所示: 前4字节代表接下来到语句级别分隔符字母P(不含)或者该批次结束符F(不含)的解码结果的总字节数,该值如果为0代表本批次解码结束。 接下来8字节uint64代表相应lsn(begin对应first_lsn,commit对应end_lsn,其他场景对应该条语句的lsn)。 接下来1字节的字母有5种B/C/I/U/D,分别代表begin/commit/insert/update/delete。 第3.接下来1字节的字母有5种B/C/I/U/D,...步字母为B时。 接下来的8字节uint64代表
CS N。 接下来的8字节uint64代表first_lsn。 【该部分为可选项】接下来的1字节字母如果为T,则代表后面4字节uint32表示该事务commit时间戳长度,再后面等同于该长度的字符为时间戳字符串。 【该部分为可选项】接下来的1字节字母如果为N,则代表后面4字节uint32表示该事务用户名的长度,再后面等同于该长度的字符为事务的用户名字。 因为之后仍可能有解码语句,接下来会有1字节字母P或F作为语句间的分隔符,P代表本批次仍有解码的语句,F代表本批次完成。 第3.接下来1字节的字母有5种B/C/I/U/D,...步字母为C时: 【该部分为可选项】接下来1字节字母如果为X,则代表后面的8字节uint64表示xid。 【该部分为可选项】接下来的1字节字母如果为T,则代表后面4字节uint32表示时间戳长度,再后面等同于该长度的字符为时间戳字符串。 因为批量发送日志时,一个COMMIT日志解码之后可能仍有其他事务的解码结果,接下来的1字节字母如果为P则表示该批次仍需解码,如果为F则表示该批次解码结束。 第3.接下来1字节的字母有5种B/C/I/U/D,...步字母为I/U/D时: 接下来的2字节uint16代表schema名的长度。 按照上述长度读取schema名。 接下来的2字节uint16代表table名的长度。 按照上述长度读取table名。 【该部分为可选项】接下来1字节字母如果为N代表为新元组,如果为O代表为旧元组,这里先发送新元组。 接下来的2字节uint16代表该元组需要解码的列数,记为attrnum。 以下流程重复attrnum次。 接下来2字节uint16代表列名的长度。 按照上述长度读取列名。 接下来4字节uint32代表当前列类型的Oid。 接下来4字节uint32代表当前列的值(以字符串格式存储)的长度,如果为0xFFFFFFFF则表示NULL,如果为0则表示长度为0的字符串。 按照上述长度读取列值。 因为之后仍可能有解码语句,接下来的1字节字母如果为P则表示该批次仍需解码,如果为F则表示该批次解码结束。 sending-batch: 指定是否批量发送。 取值范围:0或1的int型,默认值为0。 0:设为0时,表示逐条发送解码结果。 1:设为1时,表示解码结果累积到达1MB则批量发送解码结果。 开启批量发送的场景中,当解码格式为'j'或't'时,在原来的每条解码语句之前会附加一个uint32类型,表示本条解码结果长度(长度不包含当前的uint32类型),以及一个uint64类型,表示当前解码结果对应的lsn。 parallel-queue-size: 指定并行逻辑解码线程间进行交互的队列长度。 取值范围:2~1024的int型,且必须为2的整数幂,默认值为128。 队列长度和解码过程的内存使用量正相关。
-
GS_SQLAPPLY_SKIP GS_SQLAPPLY_SKIP系统表存储逻辑回放可跳过执行的规则。 表1 GS_SQLAPPLY_SKIP字段 字段名称 字段类型 说明 createtime timestamp 新建时间戳。 originid int4 复制源标识。 skiptype int4 SKIP类型: 1:SKIP OBJ 2:SKIP TXN 3:SKIP ERR dumpcontext char 转储事务到文件: 'a':转储整个事务。 'n':不转储。 's':仅转储事务跳过的变更。 param1 text 参考表2表3中的字段说明。 param2 text 参考表2表3中的字段说明。 param3 text 参考表2中的字段说明。 param4 text 参考表2中的字段说明。 param5 text 预留字段。 表2 SKIP OBJ或SKIP ERR时,param1-4的字段 字段名称 字段类型 说明 db_name text 数据库名称。 schema_name text 模式名称。 object_name text 对象名称。 stmt_type text SQL语句类型。 表3 SKIP TXN时,param1-2字段 字段名称 字段类型 说明 csn text 事务序列号。 xid text 事务ID。 父主题: 逻辑解码
-
GS_
LOG ICAL_TYPE GS_LOGICAL_TYPE系统表存储数据类型的相关信息。 表1 GS_LOGICAL_TYPE字段 字段名称 字段类型 说明 typname name 类型名称。 typnamespace oid 包含此类型的命名空间的OID。 typlen smallint 该类型值所使用的字节数。 typbyval boolean 该类型的值是按值还是按引用传递。 typtype "char" 表示表的行类型。 typisdefined boolean 表示类型是否被完全定义。 typreceive regproc 二进制格式的接收函数。 typsend regproc 发送函数。 typmodin regproc 用于可选类型修饰符的输入函数。 typmodout regproc 输出函数。 typid oid 类型的OID。 dbnode oid 数据库OID。 originid integer 元组的来源标识符。 createtime timestamp with time zone 插入元组的时间戳。 csnmin bigint 插入元组时的 CSN(提交序列号)。 csnmax bigint 更新或删除元组时的 CSN。 typstorage "char" 指定字段的数据存储方式,具体包含以下几个类型: p:普通存储(plain)。数值总是以简单方式存储。 e:外部存储(external)。数据实际存储在主表以外的地方(如TOAST表),主表存储的是指向该外部存储数据的引用。 m:主体存储(main)。该方式与“普通存储”类似,可以以内联的压缩方式存储。通常用于存储需要自定义存储方式的类型,如自定义的复合类型。 x:扩展存储(extended)。值可以被压缩和/或移动到一个二级关系表中。 x一般是TOAST类型存储的方式。 typelem oid 如果typelem不为零,那么它表示gs_logical_type表中的另一行,该行定义了通过下标获取的类型(如数组)。如果typsubscript为零,则typelem应该为零。如果处理程序不需要typelem来确定下标类型,那么当typsubscript不为零时typelem也可以为零。请注意,typelem依赖关系表示了该类型中元素类型物理上的约束;因此,DDL修改类型时可能会因这种类型的存在而受到限制。 typinput regproc 输入转换函数(文本格式)。 typoutput regproc 输出转换函数(文本格式)。 typrelid oid 如果是复合类型(请参见typtype),则这个字段指向GS_LOGICAL_CLASS中定义该表的行。对于复合类型,GS_LOGICAL_CLASS的类型不是一个表。对于非复合类型,该字段为零。 父主题: 逻辑解码
-
GS_LOGICAL_SET GS_LOGICAL_SET系统表存储SET数据类型定义的元数据。 表1 GS_LOGICAL_SET字段 字段名称 字段类型 说明 setid oid 行标识符。 settypid oid SET数据类型的OID。 setnum tinyint SET数据类型的成员数量,最大64个成员。 setsortorder tinyint SET数据类型定义时成员的排序位置,从0开始编号。 setlabel text SET数据类型的成员名称。 dbnode oid 数据库OID。 originid integer 元组的来源标识符。 createtime timestamp with time zone 插入元组的时间戳。 csnmin bigint 插入元组时的 CSN(提交序列号)。 csnmax bigint 更新或删除元组时的 CSN。 numbers integer 用于M兼容SET和ENUM数据类型的成员数量,仅M兼容模式用到该字段。 sortorder integer 用于M兼容SET和ENUM数据类型定义时成员的排序位置,仅M兼容模式用到该字段。 父主题: 逻辑解码
-
GS_LOGICAL_DATABASE GS_LOGICAL_DATABASE系统表存储关于可用数据库的信息。 表1 GS_LOGICAL_DATABASE字段 字段名称 字段类型 说明 datname name 数据库名称。 datid oid 数据库OID。 csnmin bigint 插入元组时的 CSN(提交序列号)。 csnmax bigint 更新或删除元组时的 CSN。 createtime timestamp with time zone 插入元组的时间戳。 originid integer 元组的来源标识符。 datdba oid 数据库所有人,通常为其创建者。 encoding integer 数据库的字符编码方式。 datcollate name 数据库使用的排序顺序。 datctype name 数据库使用的字符分类。 dattablespace oid 数据库的缺省表空间。 datcompatibility name 数据库兼容模式,当前支持五种兼容模式:A、B、C、M、PG,分别表示兼容O、MY、TD、M-Compatibility和POSTGRES。 dattimezone name 数据库时区信息,默认为PRC时区。 父主题: 逻辑解码
-
GS_LOGICAL_INDEX GS_LOGICAL_INDEX系统表存储了索引的部分信息,其他的信息存储在GS_LOGICAL_CLASS系统表中。 表1 GS_LOGICAL_INDEX字段 字段名称 字段类型 说明 indexrelid Oid 索引的OID。 indrelid Oid 它所引用的RELATION OID。 indnatts smallint 索引中的总列数。 indisunique boolean 是否是唯一索引。 indisprimary boolean 这个索引是否为主键。 csnmin bigint 插入元组时的 CSN(提交序列号)。 csnmax bigint 更新或删除元组时的 CSN。 createtime timestamp with time zone 插入元组的时间戳。 originid integer 元组的来源标识符。 dbnode oid 数据库OID。 indimmediate boolean 是否立即执行唯一性约束。 indisvalid boolean 此索引是否可用于查询。 indisready boolean 此索引是否准备好接受插入。 indisusable boolean 此索引是否可用于插入和选择。 indkey int2vector 索引列的列编号。 indcollation oidvector 排序标识符。 indpred pg_node_tree 如果是部分索引,则为谓词的表达式树;否则为 NULL。 indisreplident boolean 索引是否被标识为复制标识索引。 父主题: 逻辑解码
-
GS_LOGICAL_ENUM GS_LOGICAL_ENUM系统表存储了每个枚举类型值和标签的记录。 表1 GS_LOGICAL_ENUM 字段名称 字段类型 说明 enumid oid 行标识符。 enumtypid oid 拥有这个枚举值的PG_TYPE记录的OID。 enumlabel name 这个枚举值的文本标签。 enumsortorder real 这个枚举值在它的枚举类型中的排序位置。 dbnode oid 数据库OID。 originid integer 元组的来源标识符。 createtime timestamp with time zone 插入元组的时间戳。 csnmin bigint 插入元组时的 CSN(提交序列号)。 csnmax bigint 更新或删除元组时的 CSN。 父主题: 逻辑解码
-
GS_LOGICAL_PARTITION GS_LOGICAL_PARTITION系统表存储分区表相关的信息。 表1 GS_LOGICAL_PARTITION字段 字段名称 字段类型 说明 partitionid Oid 分区表OID。 relname name 分区表的名称。 parttype char 分区类型。 parentid oid 父表OID。 relfilenode oid 分区表relfilenode。 reltoastrelid oid TOAST 表的OID。 reltoastidxid oid TOAST索引的OID。 csnmin bigint 插入元组时的 CSN(提交序列号)。 csnmax bigint 更新或删除元组时的 CSN。 originid integer 元组的来源标识符。 createtime timestamp with time zone 插入元组的时间戳。 reltablespace oid 表空间的OID。 dbnode oid 数据库OID。 父主题: 逻辑解码
-
GS_LOGICAL_INDEX GS_LOGICAL_INDEX系统表存储了索引的部分信息,其他的信息存储在GS_LOGICAL_CLASS系统表中。 表1 GS_LOGICAL_INDEX字段 字段名称 字段类型 说明 indexrelid Oid 索引的OID。 indrelid Oid 它所引用的RELATION OID。 indnatts smallint 索引中的总列数。 indisunique boolean 是否是唯一索引。 indisprimary boolean 这个索引是否为主键。 csnmin bigint 插入元组时的 CSN(提交序列号)。 csnmax bigint 更新或删除元组时的 CSN。 createtime timestamp with time zone 插入元组的时间戳。 originid integer 元组的来源标识符。 dbnode oid 数据库OID。 indimmediate boolean 是否立即执行唯一性约束。 indisvalid boolean 此索引是否可用于查询。 indisready boolean 此索引是否准备好接受插入。 indisusable boolean 此索引是否可用于插入和选择。 indkey int2vector 索引列的列编号。 indcollation oidvector 排序标识符。 indpred pg_node_tree 如果是部分索引,则为谓词的表达式树;否则为 NULL。 indisreplident boolean 索引是否被标识为复制标识索引。 父主题: 逻辑解码
-
GS_LOGICAL_TYPE GS_LOGICAL_TYPE系统表存储数据类型的相关信息。 表1 GS_LOGICAL_TYPE字段 字段名称 字段类型 说明 typname name 类型名称。 typnamespace oid 包含此类型的命名空间的OID。 typlen smallint 该类型值所使用的字节数。 typbyval boolean 该类型的值是按值还是按引用传递。 typtype "char" 表示表的行类型。 typisdefined boolean 表示类型是否被完全定义。 typreceive regproc 二进制格式的接收函数。 typsend regproc 发送函数。 typmodin regproc 用于可选类型修饰符的输入函数。 typmodout regproc 输出函数。 typid oid 类型的OID。 dbnode oid 数据库OID。 originid integer 元组的来源标识符。 createtime timestamp with time zone 插入元组的时间戳。 csnmin bigint 插入元组时的 CSN(提交序列号)。 csnmax bigint 更新或删除元组时的 CSN。 typstorage "char" 指定字段的数据存储方式,具体包含以下几个类型: p:普通存储(plain)。数值总是以简单方式存储。 e:外部存储(external)。数据实际存储在主表以外的地方(如TOAST表),主表存储的是指向该外部存储数据的引用。 m:主体存储(main)。该方式与“普通存储”类似,可以以内联的压缩方式存储。通常用于存储需要自定义存储方式的类型,如自定义的复合类型。 x:扩展存储(extended)。值可以被压缩和/或移动到一个二级关系表中。 x一般是TOAST类型存储的方式。 typelem oid 如果typelem不为零,那么它表示gs_logical_type表中的另一行,该行定义了通过下标获取的类型(如数组)。如果typsubscript为零,则typelem应该为零。如果处理程序不需要typelem来确定下标类型,那么当typsubscript不为零时typelem也可以为零。请注意,typelem依赖关系表示了该类型中元素类型物理上的约束;因此,DDL修改类型时可能会因这种类型的存在而受到限制。 typinput regproc 输入转换函数(文本格式)。 typoutput regproc 输出转换函数(文本格式)。 typrelid oid 如果是复合类型(请参见typtype),则这个字段指向GS_LOGICAL_CLASS中定义该表的行。对于复合类型,GS_LOGICAL_CLASS的类型不是一个表。对于非复合类型,该字段为零。 父主题: 逻辑解码
-
GS_LOGICAL_ATTRDEF GS_LOGICAL_ATTRDEF系统表记录逻辑解码需要使用的存储列的默认值。 表1 GS_LOGICAL_ATTRDEF字段 字段名称 字段类型 说明 adid oid 属性描述符的标识符。 adrelid oid 所属表的OID。 adnum smallint 属性号。 csnmin bigint 插入元组时的CSN(提交序列号)。 csnmax bigint 更新或删除元组时的CSN。 createtime timestamp with time zone 插入元组的时间戳。 originid integer 元组的来源标识符。 dbnode oid 数据库OID。 adbin pg_node_tree 默认值表达式。 adgencol "char" 是否为GENERATED列。 父主题: 逻辑解码
-
GS_LOGICAL_CLASS GS_LOGICAL_CLASS系统表记录逻辑解码需要使用的数据库对象信息及其之间的关系。 表1 GS_LOGICAL_CLASS字段 字段名称 字段类型 说明 relname name 表名。 relnamespace oid 命名空间OID。 relpersistence "char" 表的持久性(例如,'p' 表示永久表)。 relkind "char" 表的类型(例如,'r' 表示关系)。 relnatts smallint 表中的列数。 relhaspkey bool 表是否有(或曾经有过)主键索引。 relcmprs tinyint 表的行的压缩属性。 relreplident "char" Replica identity复制方式。 spacenode oid 表空间OID。 dbnode oid 数据库OID。 relnode oid 表对应的物理存储文件的标识符。 createtime timestamp with time zone 插入元组的时间戳。 csnmin bigint 插入元组时的 CSN(提交序列号)。 csnmax bigint 更新或删除元组时的 CSN。 originid integer 元组的来源标识符。 relid oid 关系标识符(表OID)。 relowner oid 表所有者的标识符。 reltoastrelid oid TOAST 表OID(如果存在)。 relhasoids boolean 指示表是否具有 OID(对象标识符)列。 relam oid 指示表使用的索引方法的标识符。 reloptions text[] 保存表的附加选项,以文本格式存储。 relbucket oid 指示表所属的哈希分区桶的标识符。 parttype "char" 指示该表是否是分区表,'p'表示为分区表,'n'表示为非分区表。 父主题: 逻辑解码
-
GS_LOGICAL_NAMESPACE GS_LOGICAL_NAMESPACE系统表存储名称空间相关的信息。 表1 GS_LOGICAL_NAMESPACE字段 字段名称 字段类型 说明 nspid oid 命名空间的OID。 nspname name 命名空间名称。 nspowner oid 命名空间所有者的OID。 nsptimeline bigint 命名空间的时间线标识符。 csnmin bigint 插入元组时的 CSN(提交序列号)。 csnmax bigint 更新或删除元组时的 CSN。 createtime timestamp with time zone 插入元组的时间戳。 originid integer 元组的来源标识符。 dbnode oid 数据库OID。 父主题: 逻辑解码