PostgreSQL多主机连接报错求助:DSN格式是否有误?
Go连接PostgreSQL多主机DSN格式问题解决
你的DSN格式确实存在错误,PostgreSQL的Go驱动不支持在host字段中用逗号分隔多主机的写法,以下是问题分析和正确写法:
报错原因解析
- 带空格的写法
host=host1, host2, host3:驱动会按空格分割键值对,host1,会被识别为一个不完整的键(缺少对应的值),因此抛出missing = after "host1,"错误。 - 去掉空格的
host=host1,host2,host3:驱动会将整个host1,host2,host3当作单个主机名去DNS解析,自然找不到这个不存在的主机,所以出现dial tcp: lookup host1,host2,host3: no such host错误。
正确的DSN写法
根据你使用的驱动不同,有两种正确的多主机配置方式:
1. 使用lib/pq驱动
重复声明host参数,每个主机对应一个host键值对:
user=username password=password host=host1 host=host2 host=host3 port=5432 database=db_aob sslmode=prefer target_session_attrs=read-write
如果各主机端口不同,也需要分别声明port参数,比如port=5432 port=5433 port=5434。
2. 使用pgx驱动
除了支持重复host参数的写法外,还支持hosts(复数)字段,用逗号直接分隔主机名(无空格):
user=username password=password hosts=host1,host2,host3 port=5432 database=db_aob sslmode=prefer target_session_attrs=read-write
内容的提问来源于stack exchange,提问作者chirzul.maula
相关产品推荐
相关产品推荐

