如何编写pgxpool连接远程Linode PostgreSQL RDS的有效连接字符串?
连接Linode PostgreSQL RDS的pgxpool配置问题
我用Go的pgxpool连接Docker容器中的PostgreSQL完全正常,但连接Linode PostgreSQL RDS时遇到以下问题:
- 不清楚
postgres://格式的连接URL后续正确配置方式,找不到非本地数据库的URL示例 - 缺少DSN格式的连接代码参考
当前使用的DSN返回host is invalid错误,ssl_mode参数也提示无效,代码如下:
config, err := pgxpool.ParseConfig("user=linpostgres, password=secret, host=lin-9930-2356-pgsql-primary.servers.linodedb.net, port=5432 dbname=mydb, pool_max_conns=10")
此外,使用psql连接时出现超时,命令如下:
psql --username=linpostgres --host=lin-9930-2356-pgsql-primary.servers.linodedb.net port=5432 --password
正确的pgxpool连接配置
DSN格式(推荐)
pgxpool的DSN参数不能用逗号分隔,必须用空格或&分隔,同时Linode PostgreSQL强制要求SSL连接,需指定sslmode=require:
// 空格分隔的DSN config, err := pgxpool.ParseConfig("user=linpostgres password=secret host=lin-9930-2356-pgsql-primary.servers.linodedb.net port=5432 dbname=mydb pool_max_conns=10 sslmode=require") // &分隔的DSN config, err := pgxpool.ParseConfig("user=linpostgres&password=secret&host=lin-9930-2356-pgsql-primary.servers.linodedb.net&port=5432&dbname=mydb&pool_max_conns=10&sslmode=require")
URL格式
如果习惯用postgres://开头的URL,格式如下:
config, err := pgxpool.ParseConfig("postgres://linpostgres:secret@lin-9930-2356-pgsql-primary.servers.linodedb.net:5432/mydb?pool_max_conns=10&sslmode=require")
正确的psql连接命令
psql的port参数需要加双短横线(--port),同时必须指定SSL模式:
psql --username=linpostgres --host=lin-9930-2356-pgsql-primary.servers.linodedb.net --port=5432 --dbname=mydb --password --sslmode=require
超时问题排查
psql连接超时大概率是Linode的防火墙规则限制,需要在Linode控制台的PostgreSQL实例设置中,将你的本地IP添加到允许访问的IP列表里,开放5432端口。
内容的提问来源于stack exchange,提问作者markhorrocks
相关产品推荐
相关产品推荐

