You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL配置synchronous_standby_names实现Barman同步流复制报错

PostgreSQL synchronous_standby_names 多同步备节点配置指南

报错原因

之前的配置写法将备节点名称写在了参数值的单引号外部,PostgreSQL解析配置时会将引号外的逗号识别为非法语法标记,因此触发syntax error near token ","报错。
该参数所有的同步规则、候选备节点列表必须全部写在参数值的单引号内部,不存在使用&&连接、引号外追加节点的合法写法。

参数语法规则

PostgreSQL 9.6及以上版本中,该参数的标准语法结构为:

[FIRST|ANY] num_sync ( standby_name [, standby_name ...] )

字段说明:

  • FIRST/ANY:同步策略,不填写时默认取FIRST
    • FIRST:按候选列表顺序优先选取靠前的备节点作为同步备,凑够num_sync个即可
    • ANY:候选列表中任意num_sync个备节点返回写入确认,主库就认为写入成功
  • num_sync:需要返回写入确认的同步备节点数量
  • standby_name:纳入同步候选的备节点名称,逗号分隔,支持*通配符匹配所有已连接的流复制备节点,名称需要和备节点连接时上报的application_name完全一致,大小写敏感。

面向Barman同步场景的正确配置

如果需要保留原有ANY 1 (*)的规则(任意1个备节点确认即写入成功),同时将Barman节点加入同步候选列表,正确配置如下:

synchronous_standby_names = 'ANY 1 (*, barman-wal-archive)'

常见配置示例

  • 优先选取列表前2个节点作为同步备,候选列表包含普通备库node2、node3和Barman节点:
synchronous_standby_names = 'FIRST 2 (node2, node3, barman-wal-archive)'
  • 要求任意2个备节点返回确认,所有已连接备节点均纳入候选:
synchronous_standby_names = 'ANY 2 (*)'
  • PostgreSQL 9.5及更早版本(不支持FIRST/ANY语法),默认按列表顺序优先选1个同步备:
synchronous_standby_names = 'node2, barman-wal-archive'

生效验证

  1. 修改配置后执行重载操作,无需重启数据库:
-- psql中执行
SELECT pg_reload_conf();
  1. 验证参数是否加载成功:
SHOW synchronous_standby_names;
  1. 如果配置加载成功但Barman未进入同步列表,查询pg_stat_replication视图确认Barman连接上报的application_name和配置中填写的名称完全匹配。

内容的提问来源于stack exchange,提问作者nick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 14:51:11