计算
弹性云服务器 ECS
Flexus云服务
裸金属服务器 BMS
弹性伸缩 AS
镜像服务 IMS
专属主机 DeH
函数工作流 FunctionGraph
云手机服务器 CPH
Huawei Cloud EulerOS
网络
虚拟私有云 VPC
弹性公网IP EIP
虚拟专用网络 VPN
弹性负载均衡 ELB
NAT网关 NAT
云专线 DC
VPC终端节点 VPCEP
云连接 CC
企业路由器 ER
企业交换机 ESW
全球加速 GA
安全与合规
安全技术与应用
Web应用防火墙 WAF
企业主机安全 HSS
云防火墙 CFW
安全云脑 SecMaster
DDoS防护 AAD
数据加密服务 DEW
数据库安全服务 DBSS
云堡垒机 CBH
数据安全中心 DSC
云证书管理服务 CCM
边缘安全 EdgeSec
威胁检测服务 MTD
CDN与智能边缘
内容分发网络 CDN
CloudPond云服务
智能边缘云 IEC
迁移
主机迁移服务 SMS
对象存储迁移服务 OMS
云数据迁移 CDM
迁移中心 MGC
大数据
MapReduce服务 MRS
数据湖探索 DLI
表格存储服务 CloudTable
云搜索服务 CSS
数据接入服务 DIS
数据仓库服务 GaussDB(DWS)
数据治理中心 DataArts Studio
数据可视化 DLV
数据湖工厂 DLF
湖仓构建 LakeFormation
企业应用
云桌面 Workspace
应用与数据集成平台 ROMA Connect
云解析服务 DNS
专属云
专属计算集群 DCC
IoT物联网
IoT物联网
设备接入 IoTDA
智能边缘平台 IEF
用户服务
账号中心
费用中心
成本中心
资源中心
企业管理
工单管理
国际站常见问题
ICP备案
我的凭证
支持计划
客户运营能力
合作伙伴支持计划
专业服务
区块链
区块链服务 BCS
Web3节点引擎服务 NES
解决方案
SAP
高性能计算 HPC
视频
视频直播 Live
视频点播 VOD
媒体处理 MPC
实时音视频 SparkRTC
数字内容生产线 MetaStudio
存储
对象存储服务 OBS
云硬盘 EVS
云备份 CBR
存储容灾服务 SDRS
高性能弹性文件服务 SFS Turbo
弹性文件服务 SFS
云硬盘备份 VBS
云服务器备份 CSBS
数据快递服务 DES
专属分布式存储服务 DSS
容器
云容器引擎 CCE
容器镜像服务 SWR
应用服务网格 ASM
华为云UCS
云容器实例 CCI
管理与监管
云监控服务 CES
统一身份认证服务 IAM
资源编排服务 RFS
云审计服务 CTS
标签管理服务 TMS
云日志服务 LTS
配置审计 Config
资源访问管理 RAM
消息通知服务 SMN
应用运维管理 AOM
应用性能管理 APM
组织 Organizations
优化顾问 OA
IAM 身份中心
云运维中心 COC
资源治理中心 RGC
应用身份管理服务 OneAccess
数据库
云数据库 RDS
文档数据库服务 DDS
数据管理服务 DAS
数据复制服务 DRS
云数据库 GeminiDB
云数据库 GaussDB
分布式数据库中间件 DDM
数据库和应用迁移 UGO
云数据库 TaurusDB
人工智能
人脸识别服务 FRS
图引擎服务 GES
图像识别 Image
内容审核 Moderation
文字识别 OCR
AI开发平台ModelArts
图像搜索 ImageSearch
对话机器人服务 CBS
华为HiLens
视频智能分析服务 VIAS
语音交互服务 SIS
应用中间件
分布式缓存服务 DCS
API网关 APIG
微服务引擎 CSE
分布式消息服务Kafka版
分布式消息服务RabbitMQ版
分布式消息服务RocketMQ版
多活高可用服务 MAS
事件网格 EG
企业协同
华为云会议 Meeting
云通信
消息&短信 MSGSMS
云生态
合作伙伴中心
云商店
开发者工具
SDK开发指南
API签名指南
Terraform
华为云命令行工具服务 KooCLI
其他
产品价格详情
系统权限
管理控制台
客户关联华为云合作伙伴须知
消息中心
公共问题
开发与运维
应用管理与运维平台 ServiceStage
软件开发生产线 CodeArts
需求管理 CodeArts Req
部署 CodeArts Deploy
性能测试 CodeArts PerfTest
编译构建 CodeArts Build
流水线 CodeArts Pipeline
制品仓库 CodeArts Artifact
测试计划 CodeArts TestPlan
代码检查 CodeArts Check
代码托管 CodeArts Repo
云应用引擎 CAE
开天aPaaS
云消息服务 KooMessage
云手机服务 KooPhone
云空间服务 KooDrive
本文导读

展开导读

逻辑复制函数

更新时间:2024-06-03 GMT+08:00
说明:

使用逻辑复制函数时,需要设设置GUC参数wal_level为logical。具体配置请参考《特性指南》的“逻辑解码 > 使用SQL函数接口进行逻辑解码”章节。

  • pg_create_logical_replication_slot('slot_name', 'plugin_name', 'output_order')

    描述:创建逻辑复制槽。

    参数说明:

    • slot_name

      流复制槽名称。

      取值范围:字符串,仅支持小写字母、数字以及“_”,“?”,“-”,“.”字符,且不支持“.”或“..”单独作为复制槽名称。

    • plugin_name

      插件名称。

      取值范围:字符串,当前支持mppdb_decoding。

    • output_order

      复制槽解码结果输出顺序,该参数为可选参数。

      取值范围:0或1,在DN上默认值为0, 在CN上默认值为1。

      • 0:设为0时,复制槽解码结果按照事务的COMMIT LSN排序。此时复制槽的confirmed_csn为0,此复制槽称为LSN序复制槽
      • 1:设为1时,复制槽解码结果按照事务的CSN排序。此时复制槽的confirmed_csn为非0值,此复制槽称为CSN序复制槽,此类复制槽的confirmed_flush值无意义。

    返回值类型:name, text

    示例:
    gaussdb=# SELECT * FROM pg_create_logical_replication_slot('slot_lsn','mppdb_decoding',0);
     slotname | xlog_position
    ----------+---------------
     slot_lsn | 0/6D08B58
    (1 row)
    
    gaussdb=# SELECT * FROM pg_create_logical_replication_slot('slot_csn','mppdb_decoding',1);
     slotname | xlog_position
    ----------+---------------
     slot_csn | 0/59AD800
    (1 row)

    备注:第一个返回值表示slot_name,第二个返回值在LSN序复制槽和CSN序复制槽下有不同含义。对于LSN序复制槽,该值为复制槽的confirmed_flush,表示COMMIT LSN小于等于该值的事务之后不会被解码输出;对于CSN序复制槽,该值为复制槽的confirmed_csn,表示CSN小于等于该值的事务之后不会被解码输出。调用该函数的用户需要具有SYSADMIN权限或具有REPLICATION权限或继承了内置角色gs_role_replication的权限。此函数目前只支持在CN或主DN上调用。

    注意:

    当该函数在CN上执行时,如果output_order值为1,会在所有CN和主DN上创建同名复制槽,如果某些DN上已存在同名复制槽,会在除当前CN节点外,其他不存在同名复制槽的CN和主DN节点上创建CSN序逻辑复制槽,同时报错复制槽已存在。因此需删除其他CN和主DN上已有的同名复制槽(如为LSN序复制槽则需在对应节点手动删除)再在CN上重新创建。如果在CN上创建复制槽时指定output_order为0,则不会在DN上创建复制槽。CN上创建的复制槽仅用于标识DN上存在相关复制槽。

  • pg_create_physical_replication_slot('slot_name', 'isDummyStandby')

    描述:创建新的物理复制槽。

    参数说明:

    • slot_name

      流复制槽名称。

      取值范围:字符串,仅支持小写字母、数字以及“_”,“?”,“-”,“.”字符,且不支持“.”或“..”单独作为复制槽名称。

    • isDummyStandby

      预留参数。

      类型:Boolean

    返回值类型:name,text

    说明:
    • 调用该函数的用户需要具有SYSADMIN权限或具有REPLICATION权限或继承了内置角色gs_role_replication的权限。
    • 由于该函数创建的物理复制槽没有restart_lsn,会被认为是无效槽,在做checkpoint时会被自动删除。
  • pg_drop_replication_slot('slot_name')

    描述:删除流复制槽。

    参数说明:

    • slot_name

      流复制槽名称。

      取值范围:字符串,仅支持小写字母、数字以及“_”,“?”,“-”,“.”字符,且不支持“.”或“..”单独作为复制槽名称。

    返回值类型:void

    说明:
    • 调用该函数的用户需要具有SYSADMIN权限或具有REPLICATION权限或继承了内置角色gs_role_replication的权限。
    • 删除数据库时不会删除该库上的逻辑复制槽。该库上的逻辑复制槽需要手动删除,否则将会导致xlog和系统表历史版本无法回收。
    • 在CN上删除逻辑复制槽时,若为LSN序逻辑复制槽,则仅删除当前节点复制槽,其他节点同名复制槽不受影响;否则只要其他节点有残留同名CSN序逻辑复制槽,执行删除时不会因为某些节点不存在复制槽而报错,同时所有节点的同名复制槽会被成功删除;如果任何节点均不存在该复制槽,则报错。
    • 如果当前CN节点残留LSN序逻辑复制槽,同时其他某些节点上残留同名CSN序逻辑复制槽,则在当前CN节点上执行删除复制槽操作仅会删除本地LSN序逻辑复制槽,待删除完成再次执行删除操作方可删除其他节点的同名复制槽。
  • pg_logical_slot_peek_changes('slot_name', 'upto_lsn', upto_nchanges, 'options_name', 'options_value')

    描述:解码并不推进流复制槽(下次解码可以再次获取本次解出的数据)。

    参数说明:

    • slot_name

      流复制槽名称。

      取值范围:字符串,仅支持小写字母、数字以及“_”,“?”,“-”,“.”字符,且不支持“.”或“..”单独作为复制槽名称。

    • upto_lsn

      在CSN序逻辑复制槽上代表日志的CSN,表示解码直到小于等于此CSN的事务日志解码完毕(可能会解码一个CSN大于指定CSN的事务);在LSN序复制槽上代表日志的LSN,表示解码直到COMMIT LSN大于等于该LSN的第一个事务解码完毕。

      取值范围:字符串(代表十六进制格式表示的uint64,在正中间用'/'分割,左右两边各为一个uint32,如某个uint32为0则显示0),如'1/2AAFC60'、'0/A060'或'3A/0'。为NULL时表示不对解码截止的日志位置做限制。

    • upto_nchanges

      解码条数(包含begin和commit)。假设一共有三条事务,分别包含3、5、7条记录,如果upto_nchanges为4,那么会解码出前两个事务共8条记录。解码完第二条事务时发现解码条数记录大于等于upto_nchanges,会停止解码。

      取值范围:非负整数。

      说明:

      upto_lsn和upto_nchanges中任一参数达到限制,解码都会结束。

    • options:此项为可选参数,由一系列options_name和options_value一一对应组成。
      • include-xids

        解码出的data列是否包含xid信息。

        取值范围:bool型,默认值为true。

        • false:设为false时,解码出的data列不包含xid信息。
        • true:设为true时,解码出的data列包含xid信息。
      • skip-empty-xacts

        解码时是否忽略空事务信息。

        取值范围:bool型,默认值为false。

        • false:设为false时,解码时不忽略空事务信息。
        • true:设为true时,解码时会忽略空事务信息。
      • include-timestamp

        解码信息是否包含commit时间戳。

        取值范围:bool型,默认值为true。

        • false:设为false时,解码信息不包含commit时间戳。
        • true:设为true时,解码信息包含commit时间戳。
      • only-local

        是否仅解码本地日志。

        取值范围:Boolean型,默认值为true。

        • false:设为false时,解码非本地日志和本地日志。
        • true:设为true时,仅解码本地日志。
      • force-binary

        是否以二进制格式输出解码结果

        取值范围:Boolean型,默认值为false。

        • false:设为false时,以文本格式输出解码结果。
        • true:暂不支持设置。
      • white-table-list

        白名单参数,包含需要进行解码的schema和表名。

        取值范围:包含白名单中表名的字符串,不同的表以','为分隔符进行隔离;使用'*'来模糊匹配所有情况;schema名和表名间以'.'分割,不允许存在任意空白符。例:

        SELECT * FROM pg_logical_slot_peek_changes('slot1', NULL, 4096, 'white-table-list', 'public.t1,public.t2');
      • max-txn-in-memory

        内存管控参数,单位为MB,单个事务占用内存大于该值即进行落盘。

        取值范围:0~100的整型,默认值为0,即不开启此种管控。

      • max-reorderbuffer-in-memory

        内存管控参数,单位为GB,拼接-发送线程中正在拼接的事务总内存(包含缓存)大于该值则对当前解码事务进行落盘。

        取值范围:0~100的整型,默认值为0,即不开启此种管控。

      • include-user

        事物的BEGIN逻辑日志是否输出事务的用户名字。

        取值范围:Boolean型,默认值为false。

        • false:设为false时,事务的BEGIN逻辑日志不输出事务的用户名字。
        • true:设为true时,事务的BEGIN逻辑日志输出事务的用户名字。
      • exclude-userids

        黑名单用户的OID参数。

        取值范围:指定黑名单用户的OID,多个OID通过','分隔,不校验用户OID是否存在。

      • exclude-users

        黑名单用户的名字参数。

        取值范围:指定黑名单用户的名字,多个名字通过','分隔;通过dynamic-resolution设置是否动态解析识别用户名字。若解码报错用户不存在而中断,在确定日志产生时刻不存在对应的黑名单用户,可以通过配置dynamic-resolution成true或者从用户黑名单中删除报错用户名字来启动解码继续获取逻辑日志。

      • dynamic-resolution

        是否动态解析黑名单用户名字。

        取值范围:bool型,默认值为true。

        • false:设为false时,当解码观测到黑名单exclude-users中用户不存在时将会报错并退出逻辑解码。
        • true:设为true时,当解码观测到黑名单exclude-users中用户不存在时继续解码。
    说明:

    其他配置选项可参考《特性指南》中“逻辑复制 > 逻辑解码 > 逻辑解码选项”章节。

    返回值类型:text、xid、text

    示例:
    gaussdb=# SELECT * FROM pg_logical_slot_peek_changes('slot_lsn',NULL,4096,'skip-empty-xacts','on');
     location  |  xid  |                                                                                            data
    -----------+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     0/6D0B500 | 46914 | BEGIN 46914
     0/6D0B530 | 46914 | {"table_name":"public.t1","op_type":"INSERT","columns_name":["a","b"],"columns_type":["integer","integer"],"columns_val":["3","1"],"old_keys_name":[],"old_keys_type":[],"old_keys_val":[]}
     0/6D0B8B8 | 46914 | COMMIT 46914 (at 2023-02-22 17:29:31.090018+08) CSN 94034528
     0/6D0BB58 | 46915 | BEGIN 46915
     0/6D0BB88 | 46915 | {"table_name":"public.t1","op_type":"INSERT","columns_name":["a","b"],"columns_type":["integer","integer"],"columns_val":["3","2"],"old_keys_name":[],"old_keys_type":[],"old_keys_val":[]}
     0/6D0BF08 | 46915 | COMMIT 46915 (at 2023-02-22 17:31:30.672093+08) CSN 94034568
     0/6D0BF08 | 46916 | BEGIN 46916
     0/6D0BF38 | 46916 | {"table_name":"public.t1","op_type":"INSERT","columns_name":["a","b"],"columns_type":["integer","integer"],"columns_val":["3","3"],"old_keys_name":[],"old_keys_type":[],"old_keys_val":[]}
     0/6D0C218 | 46916 | COMMIT 46916 (at 2023-02-22 17:31:34.438319+08) CSN 94034570
    (9 rows)
    
    gaussdb=# SELECT * FROM pg_logical_slot_peek_changes('slot_csn',NULL,4096,'skip-empty-xacts','on');
     location  |  xid  |                                                                                            data
    -----------+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     0/0       | 46914 | BEGIN CSN: 94034528
     0/0       | 46914 | {"table_name":"public.t1","op_type":"INSERT","columns_name":["a","b"],"columns_type":["integer","integer"],"columns_val":["3","1"],"old_keys_name":[],"old_keys_type":[],"old_keys_val":[]}
     0/59ADA60 | 46914 | COMMIT 46914 (at 2023-02-22 17:29:31.090018+08) CSN 94034528
     0/59ADA60 | 46915 | BEGIN CSN: 94034568
     0/59ADA60 | 46915 | {"table_name":"public.t1","op_type":"INSERT","columns_name":["a","b"],"columns_type":["integer","integer"],"columns_val":["3","2"],"old_keys_name":[],"old_keys_type":[],"old_keys_val":[]}
     0/59ADA88 | 46915 | COMMIT 46915 (at 2023-02-22 17:31:30.672093+08) CSN 94034568
     0/59ADA88 | 46916 | BEGIN CSN: 94034570
     0/59ADA88 | 46916 | {"table_name":"public.t1","op_type":"INSERT","columns_name":["a","b"],"columns_type":["integer","integer"],"columns_val":["3","3"],"old_keys_name":[],"old_keys_type":[],"old_keys_val":[]}
     0/59ADA8A | 46916 | COMMIT 46916 (at 2023-02-22 17:31:34.438319+08) CSN 94034570
    (9 rows)

    备注:函数返回解码结果,每一条解码结果包含三列,对应上述返回值类型,分别表示LSN(LSN序复制槽)或CSN(CSN序复制槽)位置、xid和解码内容。其中location列代表CSN时,仅当解码到COMMIT日志时才会更新。调用该函数的用户需要具有SYSADMIN权限或具有REPLICATION权限或继承了内置角色gs_role_replication的权限。

    说明:

    在CN上,该函数不支持在CSN序复制槽(confirmed_csn值不为0)上执行。

  • pg_logical_slot_get_changes('slot_name', 'upto_lsn', upto_nchanges, 'options_name', 'options_value')

    描述:解码并推进流复制槽。

    参数说明: 与pg_logical_slot_peek_changes一致,详细内容请参见pg_logical_slot_peek_changes

    备注:调用该函数的用户需要具有SYSADMIN权限或具有REPLICATION权限或继承了内置角色gs_role_replication的权限。

    说明:

    在CN上,该函数不支持在CSN序复制槽(confirmed_csn值不为0)上执行。此函数在备DN调用会同步推进主DN上对应的逻辑复制槽。在备DN上执行该函数,推进主DN对应复制槽时需占用主DN的一个walsender。由于逻辑解码功能会为每个逻辑复制槽预留walsender,因此正常场景执行该函数会正常推进主DN的逻辑复制槽,如果短时间连续执行该函数会导致通知主DN推进失败,且没有报错。

  • pg_logical_slot_peek_binary_changes('slot_name', 'upto_lsn', upto_nchanges, 'options_name', 'options_value')

    描述:以二进制格式解码且不推进流复制槽(下次解码可以再次获取本次解出的数据)。

    参数说明:

    • slot_name

      流复制槽名称。

      取值范围:字符串,仅支持小写字母、数字以及“_”,“?”,“-”,“.”字符,且不支持“.”或“..”单独作为复制槽名称。

    • upto_lsn

      在CSN序逻辑复制槽上代表日志的CSN,表示解码直到小于等于此CSN的事务日志解码完毕(可能会解码一个CSN大于指定CSN的事务);在LSN序复制槽上代表日志的LSN,表示解码直到COMMIT LSN大于等于该LSN的第一个事务解码完毕。

      取值范围:字符串(代表十六进制格式表示的uint64,在正中间用'/'分割,左右两边各为一个uint32,如某个uint32为0则显示0),如'1/2AAFC60'、'0/A060'或'3A/0'。为NULL时表示不对解码截止的日志位置做限制。

    • upto_nchanges

      解码条数(包含begin和commit)。假设一共有三条事务,分别包含3、5、7条记录,如果upto_nchanges为4,那么会解码出前两个事务共8条记录。解码完第二条事务时发现解码条数记录大于等于upto_nchanges,会停止解码。

      取值范围:非负整数。

      说明:

      upto_lsn和upto_nchanges中任一参数达到限制,解码都会结束。

    • options:此项为可选参数,由一系列options_name和options_value一一对应组成。
      • include-xids

        解码出的data列是否包含xid信息。

        取值范围:Boolean型,默认值为true。

        • false:设为false时,解码出的data列不包含xid信息。
        • true:设为true时,解码出的data列包含xid信息。
      • skip-empty-xacts

        解码时是否忽略空事务信息。

        取值范围:Boolean型,默认值为false。

        • false:设为false时,解码时不忽略空事务信息。
        • true:设为true时,解码时会忽略空事务信息。
      • include-timestamp

        解码信息是否包含commit时间戳。

        取值范围:Boolean型,默认值为true。

        • false:设为false时,解码信息不包含commit时间戳。
        • true:设为true时,解码信息包含commit时间戳。
      • only-local

        是否仅解码本地日志。

        取值范围:Boolean型,默认值为true。

        • false:设为false时,解码非本地日志和本地日志。
        • true:设为true时,仅解码本地日志。
      • force-binary

        对此函数不生效。

        取值范围:Boolean型,均以二进制格式输出结果。

      • white-table-list

        白名单参数,包含需要进行解码的schema和表名。

        取值范围:包含白名单中表名的字符串,不同的表以','为分隔符进行隔离;使用'*'来模糊匹配所有情况;schema名和表名间以'.'分割,不允许存在任意空白符。例:select * from pg_logical_slot_peek_binary_changes('slot1', NULL, 4096, 'white-table-list', 'public.t1,public.t2');

      • max-txn-in-memory

        内存管控参数,单位为MB,单个事务占用内存大于该值即进行落盘。

        取值范围:0~100的整型,默认值为0,即不开启此种管控。

      • max-reorderbuffer-in-memory

        内存管控参数,单位为GB,拼接-发送线程中正在拼接的事务总内存(包含缓存)大于该值则对当前解码事务进行落盘。

        取值范围:0~100的整型,默认值为0,即不开启此种管控。

      • include-user

        事物的BEGIN逻辑日志是否输出事务的用户名字。

        取值范围:Boolean型,默认值为false。

        • false:设为false时,事务的BEGIN逻辑日志不输出事务的用户名字。
        • true:设为true时,事务的BEGIN逻辑日志输出事务的用户名字。
      • exclude-userids

        黑名单用户的OID参数。

        取值范围:指定黑名单用户的OID,多个OID通过','分隔,不校验用户OID是否存在。

      • exclude-users

        黑名单用户的名字参数。

        取值范围:指定黑名单用户的名字,多个名字通过','分隔;通过dynamic-resolution设置是否动态解析识别用户名字。若解码报错用户不存在而中断,在确定日志产生时刻不存在对应的黑名单用户,可以通过配置dynamic-resolution成true或者从用户黑名单中删除报错用户名字来启动解码继续获取逻辑日志。

      • dynamic-resolution

        是否动态解析黑名单用户名字。

        取值范围:Boolean型,默认值为true。

        • false:设为false时,当解码观测到黑名单exclude-users中用户不存在时将会报错并退出逻辑解码。
        • true:设为true时,当解码观测到黑名单exclude-users中用户不存在时继续解码。
    说明:

    某些配置选项在函数中仅能配置而不实际生效,可参考《特性指南》中“逻辑复制 > 逻辑解码 > 逻辑解码选项”章节。

    返回值类型:text、xid、bytea

    备注:函数返回解码结果,每一条解码结果包含三列,对应上述返回值类型,分别表示LSN位置、xid和二进制格式的解码内容。调用该函数的用户需要具有SYSADMIN权限或具有REPLICATION权限或继承了内置角色gs_role_replication的权限。

    说明:

    在CN上,该函数不支持在CSN序复制槽(confirmed_csn值不为0)上执行。

  • pg_logical_slot_get_binary_changes('slot_name', 'upto_lsn', upto_nchanges, 'options_name', 'options_value')

    描述:以二进制格式解码并推进流复制槽。

    参数说明:与pg_logical_slot_peek_binary_changes一致,详细内容请参见•pg_logical_slot_peek_bi...

    备注:调用该函数的用户需要具有SYSADMIN权限或具有REPLICATION权限或继承了内置角色gs_role_replication的权限。

    说明:

    在CN上,该函数不支持在CSN序复制槽(confirmed_csn值不为0)上执行。该函数不支持在备DN上执行。

  • pg_replication_slot_advance ('slot_name', 'upto_lsn')

    描述:直接推进流复制槽到指定位置(CSN序逻辑复制槽代表CSN,LSN序复制槽代表LSN),不输出解码结果。

    参数说明:

    • slot_name

      流复制槽名称。

      取值范围:字符串,不支持除小写字母,数字,以及“_”,“?”,“-”,“.”以外的字符,且不支持'.'或'..'单独作为复制槽名称。

    • upto_lsn

      在CSN序逻辑复制槽上代表推进到的日志CSN位置,下次解码时只会输出比该CSN大的事务结果。如果输入的CSN比当前流复制槽记录的confirmed_csn还要小,则直接返回;如果输入的CSN比当前可获取的最新CSN要大,则推进到当前可获取的最新CSN。

      在LSN序复制槽上代表推进到的日志LSN位置,下次解码时只会输出提交位置比该LSN大的事务结果。如果输入的LSN比当前流复制槽记录的推进位置还要小,则报错;如果输入的LSN比当前最新物理日志LSN还要大,则推进到当前最新物理日志LSN。

      取值范围:字符串(代表十六进制格式表示的uint64,在正中间用'/'分割,左右两边各为一个uint32,如某个uint32为0则显示0),如'1/2AAFC60'、'0/A060'或'3A/0'。为NULL时表示不对解码截止的日志位置做限制。

    返回值类型:name, text

    说明:
    • 返回值分别对应slot_name和实际推进到的位置(CSN或LSN)。调用该函数的用户需要具有SYSADMIN权限或具有REPLICATION权限或继承了内置角色gs_role_replication的权限。
    • 在CN上,该函数不支持在CSN序复制槽(confirmed_csn值不为0)上执行。该函数在备DN上仅支持对逻辑复制槽执行,同步推进主DN上对应的逻辑复制槽。在备DN上执行该函数,推进主DN对应复制槽时需占用主DN的一个walsender。由于逻辑解码功能会为每个逻辑复制槽预留walsender,因此正常场景执行该函数会正常推进主DN的逻辑复制槽,如果短时间连续执行该函数会导致通知主DN推进失败,且没有报错。
  • pg_get_replication_slots()

    描述:获取复制槽列表。

    示例:
    在DN上执行查询:
    gaussdb=# SELECT * FROM pg_get_replication_slots();
     slot_name |     plugin     | slot_type | datoid | active | xmin | catalog_xmin | restart_lsn | dummy_standby | confirmed_flush | confirmed_csn
    -----------+----------------+-----------+--------+--------+------+--------------+-------------+---------------+-----------------+---------------
     dn_6002   |                | physical  |      0 | t      |      |              | 0/3622B528  | f             |                 |
     dn_6003   |                | physical  |      0 | t      |      |              | 0/3622B528  | f             |                 |
     slot_lsn  | mppdb_decoding | logical   | 131072 | f      |      |        66658 | 0/36252350  | f             | 0/362523D0      |
     slot_test | mppdb_decoding | logical   | 131072 | f      |      |        66658 | 0/36251718  | f             |                 |      10025527
    (4 rows)
    在CN上执行查询:
    gaussdb=# SELECT * FROM pg_get_replication_slots();
     slot_name |     plugin     | slot_type | datoid | active | xmin | catalog_xmin | restart_lsn | dummy_standby | confirmed_flush | confirmed_csn
    -----------+----------------+-----------+--------+--------+------+--------------+-------------+---------------+-----------------+---------------
     slot_test | mppdb_decoding | logical   | 139264 | f      |      |              |             | f             |                 |
    (1 row)

    返回值类型: text、text、text、oid、boolean、xid、xid、text、boolean、text、xid

    备注:返回值的slot_name代表复制槽名,plugin代表逻辑复制槽对应的输出插件名称,slot_type代表复制槽的类型(physical代表物理复制槽,logical代表逻辑复制槽),datoid代表复制槽所在的数据库OID,active代表复制槽是否为激活状态(f代表未激活,t代表已激活),xmin代表数据库须为复制槽保留的最早事务的事务号,catalog_xmin代表数据库须为逻辑复制槽保留的最早的涉及系统表的事务的事务号,restart_lsn表示复制槽需要的最早xlog的物理位置,dummy_standby是预留参数,confirmed_flush代表客户端确认接收到的日志位置(逻辑复制槽专用),confirmed_csn代表客户端确认接收到的日志中最后一个事务对应的CSN(逻辑复制槽专用)。

    须知:

    在DN上执行查询,LSN序逻辑复制槽的confirmed_csn查询结果为空,CSN序逻辑复制槽的confirmed_flush查询结果为空;在CN上执行查询,CSN序逻辑复制槽的catalog_xmin、restart_lsn、confirmed_flush和confirmed_csn均不予显示,查询结果为空。

  • pg_logical_get_area_changes('LSN_start', 'LSN_end', upto_nchanges, 'decoding_plugin', 'xlog_path', 'options_name', 'options_value')

    描述:没有ddl的前提下,指定lsn区间进行解码,或者指定xlog文件进行解码。

    说明:

    约束条件如下:

    • 当前网络和硬件环境正常。
    • 单条元组大小建议不超过500MB,500MB~1GB之间会报错。
    • 不支持数据页复制这种不落xlog的数据找回。
    • 调用接口时,要求日志级别wal_level=logical,且只有在wal_level=logical期间产生的日志文件才能被解析。如果使用的xlog文件为非logical级别,则解码内容没有对应的值和类型,无其他影响。如果wal_level未被设置成logical级别,则报错不解码。
    • xlog文件只能被完全同构的dn的某个副本解析,且数据库发生没有DDL操作和VACUUM FULL,以确保可以找到数据对应的元信息。
    • 需注意一次不要读入过多xlog文件,在指定范围解码不指定文件解码时,推荐指定一次一个xlog文件的大小。一般情况下,一个xlog文件解码过程中占用内存约为该xlog文件大小的2~3倍。
    • 不支持VACUUM FULL之前的数据找回。
    • 不能解码扩容前的xlog文件。
    • 对于update语句解码需要表有主键,否则会导致update语句where里数据为空。
    • 不支持toast类型、clob类型和blob类型的字段解码,解码时遇到会跳过或者报错。
    • 此解码方式为根据xlog文本记录数据进行解码,将可解码内容解码出来,不基于事务进行解码。因此不在此xlog里的数据无法解码。
    • 从解码点开始,如果未指定解码文件,会先检测从解码开始点到最新redo值之间是否发生ddl,如果发生ddl则全部不解码;如果指定解码文件,会同时检测解码文件的开始点到文件最后可读内容之间,以及数据目录下xlog开始点到最新redo值之间是否发生ddl,检测到一条ddl则对所有表都不解码。
    • 不支持CSN序复制槽。

    备注:打开三权分立时,只有数据库初始用户可以调用;关闭三权分立时,需要具备系统管理员权限。

    参数说明:

    • LSN_start

      指定开始解码的lsn。

      取值范围:字符串(LSN,格式为xlogid/xrecoff),如'1/2AAFC60'。为NULL时表示不对解码起始的日志位置做限制。

    • LSN_end

      指定解码结束的lsn。

      取值范围:字符串(LSN,格式为xlogid/xrecoff),如'1/2AAFC60'。为NULL时表示不对解码截止的日志位置做限制。

    • upto_nchanges

      解码条数(包含begin和commit)。假设一共有三条事务,分别包含3、5、7条记录,如果upto_nchanges为4,那么会解码出前两个事务共8条记录。解码完第二条事务时发现解码条数记录大于等于upto_nchanges,会停止解码。

      取值范围:非负整数。

      说明:

      LSN和upto_nchanges中任一参数达到限制,解码都会结束。

    • decoding_plugin

    解码插件,指定解码内容输出格式的so插件。

    取值范围:提供mppdb_decoding和sql_decoding两个解码插件。

    • xlog_path

    解码插件,指定解码文件的xlog绝对路径,文件级别

    取值范围:NULL 或者 xlog文件绝对路径的字符串。

    • options:此项为可选参数,由一系列options_name和options_value一一对应组成,可以缺省。
      • include-xids

        解码出的data列是否包含xid信息。

        取值范围:bool型,默认值为true。

        false:设为false时,解码出的data列不包含xid信息。

        true:设为true时,解码出的data列包含xid信息。

      • skip-empty-xacts

        解码时是否忽略空事务信息。

        取值范围:bool型,默认值为false。

        false:设为false时,解码时不忽略空事务信息。

        true:设为true时,解码时会忽略空事务信息。

      • include-timestamp

        解码信息是否包含commit时间戳。

        取值范围:bool型,默认值为true。

        false:设为false时,解码信息不包含commit时间戳。

        true:设为true时,解码信息包含commit时间戳。

      • only-local

        是否仅解码本地日志。

        取值范围:Boolean型,默认值为true。

        false:设为false时,解码非本地日志和本地日志。

        true:设为true时,仅解码本地日志。

      • force-binary

        是否以二进制格式输出解码结果

        取值范围:Boolean型,默认值为false。

        false:设为false时,以文本格式输出解码结果。

        true:暂不支持设置。

      • white-table-list

        白名单参数,包含需要进行解码的Schema和表名。取值范围:包含白名单中表名的字符串,不同的表以','为分隔符进行隔离;使用'*'来模糊匹配所有情况;Schema名和表名间以'.'分割,不允许存在任意空白符。

    示例:

    -在CN上执行DML操作,在DN上可以查询出当前DN上执行的DML:
    gaussdb=# SELECT * FROM pg_logical_get_area_changes('0/502E418', NULL, NULL, 'sql_decoding', NULL);
     location  |  xid  |                                  data
    -----------+-------+------------------------------------------------------------------------
     0/502E448 | 17365 | insert into public.t1 values (1, 1);
     0/502E5A0 | 17365 | COMMIT 17365 (at 2023-11-01 11:28:43.92526+08) 2010016
     0/502E5D0 | 17366 | delete from public.t1 where a = 1;insert into public.t1 values (1, 2);
     0/502E6D8 | 17366 | COMMIT 17366 (at 2023-11-01 11:28:45.889283+08) 2010017
     0/502E7B8 | 17367 | delete from public.t1 where a = 1;
     0/502E8B0 | 17367 | COMMIT 17367 (at 2023-11-01 11:28:48.301307+08) 2010018
    (6 rows)
  • gs_get_parallel_decode_status()

    描述:监控各个解码线程的读取日志队列和解码结果队列的长度,以便定位并行解码性能瓶颈。

    返回值类型:text、int、text、text、text、int64、int64、TimestampTz

    示例:

    gaussdb=# SELECT * FROM gs_get_parallel_decode_status();
     slot_name | parallel_decode_num | read_change_queue_length  | decode_change_queue_length | reader_lsn | working_txn_cnt | working_txn_memory |      decoded_time
    -----------+---------------------+---------------------------+----------------------------+------------+-----------------+--------------------+------------------------
     slot1     |                   2 | queue0: 1005, queue1: 320 | queue0: 63, queue1: 748    | 0/1DCE2578 |              42 |          192927504 | 2023-01-10 11:18:22+08
    (1 row)

    备注:返回值的slot_name代表复制槽名,parallel_decode_num代表该复制槽的并行解码线程数,read_change_queue_length列出了每个解码线程读取日志队列的当前长度,decode_change_queue_length列出了每个解码线程解码结果队列的当前长度,reader_lsn表示当前reader线程读取的日志位置,working_txn_cnt表示当前拼接-发送线程中正在拼接的事务个数,working_txn_memory代表拼接-发送线程中拼接事务占用总内存(单位字节),decoded_time代表该复制槽最新解码到的WAL日志时间。

    须知:

    decoded_time时间来自检查点日志和事务提交日志,存在一定误差。如果没有解码到任何前述包含时间的日志,则显示“2000-01-01 08:00:00+08”(依照数据库设置的时区而定)。

  • gs_get_slot_decoded_wal_time(slot_name)

    描述:查看某个复制槽最新解码的WAL日志时间。

    参数说明:

    • slot_name:

      要查询的复制槽名称。

      取值范围:字符串,不支持除字母、数字以及“_”,“?”,“-”,“.”以外的字符。

    示例:

    gaussdb=# SELECT * FROM gs_get_slot_decoded_wal_time('replication_slot');
     gs_get_slot_decoded_wal_time
    ------------------------------
     2023-01-10 11:25:22+08
    (1 row)

    备注:返回一列值代表该复制槽最新解码到的WAL日志时间。

    须知:

    返回的时间来自检查点日志和事务提交日志,存在一定误差。如果没有解码到任何前述包含时间的日志,则显示“2000-01-01 08:00:00+08”(依照数据库设置的时区而定)。查询一个当前不存在的逻辑复制槽的最新解码的WAL日志时间时,返回NULL,在gsql中NULL显示和设置有关,可以使用\pset null 'null'设置。

  • gs_logical_parallel_decode_status('slot_name')

    描述:获取并行逻辑解码某一复制槽的解码统计信息,包含26行指标。

    指标定义如下:

    Record - (stat_id int, stat_name TEXT, value TEXT)
    表1 指标含义

    指标名称

    说明

    slot_name

    逻辑解码任务复制槽名称。

    reader_lsn

    逻辑解码日志位置。

    wal_read_total_time

    日志模块加载耗时。

    wal_wait_total_time

    日志模块等待耗时。

    parser_total_time

    reader线程处理耗时。

    decoder_total_time

    各decoder线程处理耗时总值。

    sender_total_time

    sender线程处理耗时。

    net_send_total_time

    网络发送逻辑日志耗时。

    net_wait_total_time

    网络等待发送逻辑日志耗时。

    net_send_total_bytes

    网络发送逻辑日志字节数。

    transaction_count

    事务数量。

    big_transaction_count

    大事务数量。

    max_transaction_tuples

    事务操作元组的最大数量。

    sent_transaction_count

    发送事务数量(本库)。

    spill_disk_transaction_count

    落盘事务数量。

    spill_disk_bytes

    累计落盘字节数量,单位:byte。

    spill_disk_count

    落盘次数。

    input_queue_full_count

    各decode线程输入队列FULL次数总数。

    output_queue_full_count

    各decode线程输出队列FULL次数总数。

    dml_count

    各decode线程解码WAL日志中DML数量(本库)总数。

    dml_filtered_count

    各decode线程解码过滤WAL日志中DML数量(本库)总数。

    toast_count

    涉及TOAST表修改行数。

    candidate_catalog_xmin

    当前逻辑复制槽catalog_xmin候选点。

    candidate_xmin_lsn

    推进catalog_xmin所需要的日志确认接收点。

    candidate_restart_valid

    推进restart_lsn所需要的日志确认接收点。

    candidate_restart_lsn

    当前逻辑复制槽restart_lsn候选点。

    参数说明:

    • slot_name

      流复制槽名称。

      取值范围:字符串,仅支持小写字母、数字以及“_”,“?”,“-”,“.”字符,且不支持“.”或“..”单独作为复制槽名称。

    返回值类型:int、text、text

    示例:

    gaussdb=# SELECT * FROM gs_logical_parallel_decode_status('replication_slot');
     stat_id |          stat_name           |      value
    ---------+------------------------------+------------------
           1 | slot_name                    | replication_slot
           2 | reader_lsn                   | 0/357E180
           3 | wal_read_total_time          | 266694599
           4 | wal_wait_total_time          | 266691307
           5 | parser_total_time            | 39971
           6 | decoder_total_time           | 81216
           7 | sender_total_time            | 48193
           8 | net_send_total_time          | 19388
           9 | net_wait_total_time          | 0
          10 | net_send_total_bytes         | 266897
          11 | transaction_count            | 7
          12 | big_transaction_count        | 1
          13 | max_transaction_tuples       | 4096
          14 | sent_transaction_count       | 7
          15 | spill_disk_transaction_count | 1
          16 | spill_disk_bytes             | 244653
          17 | spill_disk_count             | 4096
          18 | input_queue_full_count       | 0
          19 | output_queue_full_count      | 0
          20 | dml_count                    | 4097
          21 | dml_filtered_count           | 0
          22 | toast_count                  | 0
          23 | candidate_catalog_xmin       | 17152
          24 | candidate_xmin_lsn           | 0/420A598
          25 | candidate_restart_valid      | 0/420A598
          26 | candidate_restart_lsn        | 0/420A598
    (26 rows)

    备注:按照指标定义,指标应该满足下列约束关系:

    wal_read_total_time >= wal_wait_total_time;

    transaction_count >= big_transaction_count;

    transaction_count >= sent_transaction_count;

    transaction_count >= spill_disk_transaction_count;

    dml_count >= dml_filtered_count;

    dml_count >= toast_count;

    如果spill_transaction_count == 0,那么 spill_disk_bytes == 0;

    但由于严格保证需要频繁加锁解锁,将对性能造成较大影响,故上面约束关系在多线程情况下可能不满足。

    transaction_count 统计的是所有库的事务数量。

    sent_transaction_count统计的是本库的发送事务数量,因为非本库事务将不会被发送。

    当传入不存在的slot_name时,函数不报错,返回值为空。

  • gs_logical_parallel_decode_reset_status('slot_name')

    描述:重置gs_logical_parallel_decode_status('slot_name')中的指标。

    参数说明:

    • slot_name

      流复制槽名称。

      取值范围:字符串,仅支持小写字母、数字以及“_”,“?”,“-”,“.”字符,且不支持“.”或“..”单独作为复制槽名称。

    返回值类型:text

    示例:

    gaussdb=# SELECT * FROM gs_logical_parallel_decode_reset_status('replication_slot');
     gs_logical_parallel_decode_reset_status
    -----------------------------------------
     OK
    (1 row)
    
    gaussdb=# SELECT * FROM gs_logical_parallel_decode_status('replication_slot');
     stat_id |          stat_name           |      value
    ---------+------------------------------+------------------
           1 | slot_name                    | replication_slot
           2 | reader_lsn                   | 0/357E420
           3 | wal_read_total_time          | 0
           4 | wal_wait_total_time          | 0
           5 | parser_total_time            | 0
           6 | decoder_total_time           | 0
           7 | sender_total_time            | 0
           8 | net_send_total_time          | 0
           9 | net_wait_total_time          | 0
          10 | net_send_total_bytes         | 0
          11 | transaction_count            | 0
          12 | big_transaction_count        | 0
          13 | max_transaction_tuples       | 0
          14 | sent_transaction_count       | 0
          15 | spill_disk_transaction_count | 0
          16 | spill_disk_bytes             | 0
          17 | spill_disk_count             | 0
          18 | input_queue_full_count       | 0
          19 | output_queue_full_count      | 0
          20 | dml_count                    | 0
          21 | dml_filtered_count           | 0
          22 | toast_count                  | 0
          23 | candidate_catalog_xmin       | 0
          24 | candidate_xmin_lsn           | 0/0
          25 | candidate_restart_valid      | 0/420A598
          26 | candidate_restart_lsn        | 0/420A598
    (26 rows)

    备注:传入不存在的slot_name时,函数不报错,返回值为invalid slot name。

    不允许对正在进行observe的复制槽进行reset操作,异常信息按优先级如下:
    1. slot_name为空,报错,显示:ERROR: inputString should not be NULL。
    2. slot_name不为空,但不存在,不报错,显示:invalid slot name。
    3. slot_name不为空,但当前slot_name对应的复制槽正在被采样(observing),不报错,显示:can't reset during observing! use gs_logical_decode_stop_observe to stop。
  • gs_logical_decode_start_observe('slot_name', window, interval)

    描述:开启逻辑复制性能指标采样。分布式暂不支持。

    参数说明:

    • slot_name

      流复制槽名称。

      取值范围:字符串,仅支持小写字母、数字以及“_”,“?”,“-”,“.”字符,且不支持“.”或“..”单独作为复制槽名称。

    • window

      指定采样窗口大小

      取值范围:整数类型,最小2,最大1024,收集最近interval*window时间内采样数据。

    • interval

      性能监控的间隔,时间间隔类型,秒级。

      取值范围:时间间隔类型,最小1s,最大1min,收集最近interval*window时间内采样数据。

      返回值类型:text

  • gs_logical_decode_stop_observe('slot_name')

    描述:停止逻辑复制性能指标采样。分布式暂不支持。

    参数说明:

    • slot_name

      流复制槽名称。

      取值范围:字符串,仅支持小写字母、数字以及“_”,“?”,“-”,“.”字符,且不支持“.”或“..”单独作为复制槽名称。

    • 返回值类型:text

  • gs_logical_decode_observe_data('slot_name')

    描述:展示逻辑复制性能指标采样原始数据。分布式暂不支持。

    参数说明:

    • slot_name

      流复制槽名称。

      取值范围:字符串,仅支持小写字母、数字以及“_”,“?”,“-”,“.”字符,且不支持“.”或“..”单独作为复制槽名称。

    • 返回值类型:setof record

  • gs_logical_decode_observe('slot_name')

    描述:展示逻辑复制性能指标数据。分布式暂不支持。

    参数说明:

    • slot_name

      流复制槽名称。

      取值范围:字符串,仅支持小写字母、数字以及“_”,“?”,“-”,“.”字符,且不支持“.”或“..”单独作为复制槽名称。

    • 返回值类型:setof record

  • gs_logical_decode_observe_status('slot_name')

    描述:查询指定逻辑解码任务的监控状态。分布式暂不支持。

    参数说明:

    • slot_name

      流复制槽名称。

      取值范围:字符串,仅支持小写字母、数字以及“_”,“?”,“-”,“.”字符,且不支持“.”或“..”单独作为复制槽名称。

    • 返回值类型:text

  • gs_get_parallel_decode_thread_info()

    描述:在并行解码所在的DN执行,返回当前DN上并行解码的线程信息。

    返回值类型:int64、text、text、int

    示例:

    gaussdb=# SELECT * FROM gs_get_parallel_decode_thread_info();
        thread_id    | slot_name | thread_type | seq_number
    -----------------+-----------+-------------+------------
     140335364699904 | slot1     | sender      |          1
     140335214098176 | slot1     | reader      |          1
     140335325312768 | slot1     | decoder     |          1
     140335291750144 | slot1     | decoder     |          2
     140335274968832 | slot1     | decoder     |          3
     140335258187520 | slot1     | decoder     |          4
     140335165404928 | slot2     | sender      |          1
     140335022864128 | slot2     | reader      |          1
     140335129818880 | slot2     | decoder     |          1
     140335113037568 | slot2     | decoder     |          2
    (10 rows)

    备注:返回值thread_id代表线程id,slot_name代表复制槽名,thread_type表示线程种类(共三种,sender代表发送线程、reader代表读取线程、decoder代表解码线程),seq_number代表每个线程在当前复制槽中同种线程的序号。其中sender和reader在每个并行解码连接中均只有一个,因此序号均为1,decoder的序号从1排列到当前复制槽解码并行度。

  • pg_replication_origin_create (node_name)

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

    备注:调用该函数的用户需要具有SYSADMIN权限。

    参数说明:

    • node_name

      待创建的复制源的名称。

      取值范围:字符串,不支持除字母、数字以及“_”,“?”,“-”,“.”以外的字符。

    返回值类型:oid

  • pg_replication_origin_drop (node_name)

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

    备注:调用该函数的用户需要具有SYSADMIN权限。

    参数说明:

    • node_name

      待删除的复制源的名称。

      取值范围:字符串,不支持除字母、数字以及“_”,“?”,“-”,“.”以外的字符。

  • pg_replication_origin_oid (node_name)

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

    备注:调用该函数的用户需要具有SYSADMIN权限。

    参数说明:

    • node_name

      要查找的复制源的名称

      取值范围:字符串,不支持除字母、数字以及“_”,“?”,“-”,“.”以外的字符。

    返回值类型:oid

  • pg_replication_origin_session_setup (node_name)

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

    备注:调用该函数的用户需要具有SYSADMIN权限。

    参数说明:

    • node_name

      复制源名称。

      取值范围:字符串,不支持除字母、数字以及“_”,“?”,“-”,“.”以外的字符。

  • pg_replication_origin_session_reset ()

    描述:取消pg_replication_origin_session_setup()的效果。

    备注:调用该函数的用户需要具有SYSADMIN权限。

  • pg_replication_origin_session_is_setup ()

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

    备注:调用该函数的用户需要具有SYSADMIN权限。

    返回值类型:boolean

  • pg_replication_origin_session_progress (flush)

    描述:返回当前会话中选择的复制源的重放位置。

    备注:调用该函数的用户需要具有SYSADMIN权限。

    参数说明:

    • flush

      决定对应的本地事务是否被确保已经刷入磁盘。

      取值范围:boolean

    返回值类型:LSN

  • pg_replication_origin_xact_setup (origin_lsn, origin_timestamp)

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

    备注:调用该函数的用户需要具有SYSADMIN权限。

    参数说明:

    • origin_lsn

      复制源回放位置。

      取值范围:LSN

    • origin_timestamp

      事务提交时间。

      取值范围:timestamp with time zone

  • pg_replication_origin_xact_reset ()

    描述:取消pg_replication_origin_xact_setup()的效果。

    备注:调用该函数的用户需要具有SYSADMIN权限。

  • pg_replication_origin_advance (node_name, lsn)

    描述:

    将给定节点的复制进度设置为给定的位置。这主要用于设置初始位置,或在配置更改或类似的变更后设置新位置。

    注意:这个函数的使用不当可能会导致不一致的复制数据。

    备注:调用该函数的用户需要具有SYSADMIN权限。

    参数说明:

    • node_name

      已有复制源名称。

      取值范围:字符串,不支持除字母、数字以及“_”,“?”,“-”,“.”以外的字符。

    • lsn

      复制源回放位置。

      取值范围:LSN

  • pg_replication_origin_progress (node_name, flush)

    描述:返回给定复制源的重放位置。

    备注:调用该函数的用户需要具有SYSADMIN权限。

    参数说明:

    • node_name

      复制源名称。

      取值范围:字符串,不支持除字母、数字以及“_”,“?”,“-”,“.”以外的字符。

    • flush

      决定对应的本地事务是否被确保已经刷入磁盘。

      取值范围:boolean

  • pg_show_replication_origin_status()

    描述:获取复制源的复制状态。

    备注:调用该函数的用户需要具有SYSADMIN权限。

    返回值类型:

    • local_id:oid,复制源id。
    • external_id:text,复制源名称。
    • remote_lsn:LSN,复制源的lsn位置。
    • local_lsn:LSN,本地的lsn位置。
  • gs_get_distribute_decode_status()

    描述:获取当前节点上分布式解码状态细节(以复制槽为粒度),需在CN上执行,DN上执行仅返回空。

    返回值类型:text、int、int、int64、xid、xid、text、text、text

    gaussdb=# SELECT * FROM gs_get_distribute_decode_status();
     slot_name | logical_receiver_num | slice_num | walsender_thread_id | last_sent_csn | last_confirmed_csn |      receiver_queue_length      |          connect_times          |                 csn_receive_array
    -----------+----------------------+-----------+---------------------+---------------+--------------------+---------------------------------+---------------------------------+---------------------------------------------------
     slot1     |                    1 |         3 |     139958481843968 |       2012169 |            2010107 | queue0: 1, queue1: 1, queue2: 0 | slice0: 2, slice1: 2, slice2: 2 | slice0: 2012244, slice1: 2012244, slice2: 2012244
    (1 row)
    表2 指标含义

    指标名称

    类型

    说明

    slot_name

    text

    复制槽名。

    logical_receiver_num

    int

    分布式解码启动的receiver线程数量。

    slice_num

    int

    集群分片数。

    walsender_thread_id

    int64

    walsender线程id。

    last_sent_csn

    xid

    最近发送的CSN。

    last_confirmed_csn

    xid

    最后从客户端返回的已确认接收的CSN。

    receiver_queue_length

    text

    各DN接收日志队列长度(拼接后以字符串格式显示)。

    connect_times

    text

    各DN连接次数(拼接后以字符串格式显示)。

    csn_receive_array

    text

    各DN获取到的最新CSN(拼接后以字符串格式显示)。

  • gs_get_distribute_decode_status_detail()

    描述:获取当前节点上分布式解码状态细节(以DN为粒度),需在CN上执行,DN上执行仅返回空。

    返回值类型:text、int、int64、int、int、xid

    gaussdb=# SELECT * FROM gs_get_distribute_decode_status_detail();
     slot_name | slice_id |    thread_id    | queue_len | connect_times | received_csn
    -----------+----------+-----------------+-----------+---------------+--------------
     slot1     |        0 | 139959895848704 |         1 |             2 |      2012244
     slot1     |        1 | 139959895848704 |         1 |             2 |      2012244
     slot1     |        2 | 139959895848704 |         0 |             2 |      2012244
    (3 rows)
    表3 指标含义

    指标名称

    类型

    说明

    slot_name

    text

    复制槽名。

    slice_id

    int

    分片号(从0开始)。

    thread_id

    int64

    分布式解码启动的receiver线程号。

    queue_len

    int

    当前DN接收日志队列长度。

    connect_times

    int

    各DN连接次数。

    received_csn

    xid

    从当前DN获取的最新CSN。

我们使用cookie来确保您的高速浏览体验。继续浏览本站,即表示您同意我们使用cookie。 详情

文档反馈

文档反馈

意见反馈

0/500

标记内容

同时提交标记内容