从PG11升级到PG14后PostgreSQL连接URL选项失效求助
PostgreSQL 14连接URL中search_path不生效的解决办法
问题根源
PostgreSQL 14对libpq的URL参数解析逻辑做了调整,对options参数的格式要求更严格,导致PG11中可用的写法在PG14中无法被正确识别。
有效解决方法
方法一:修正URL的options参数格式
- 去掉
options前多余的&,确保第一个参数以?开头 - 对
options里的空格进行URL编码(替换为%20) - 正确的连接URL示例:
postgresql://username:password@host:port/database?options=-c%20search_path=my_schema&target_session_attrs=read-write&connect_timeout=5
如果需要设置多个配置项,用空格分隔后编码即可,比如:
postgresql://username:password@host:port/database?options=-c%20search_path=my_schema%20-c%20work_mem=64MB&target_session_attrs=read-write&connect_timeout=5
方法二:连接后手动设置search_path(更稳定)
避开URL参数解析的版本差异,在建立数据库连接后直接执行SQL语句设置search_path,不受PG版本影响:
import psycopg2 # 连接时去掉options参数 conn = psycopg2.connect("postgresql://username:password@host:port/database?target_session_attrs=read-write&connect_timeout=5") cur = conn.cursor() # 设置schema路径 cur.execute("SET search_path TO my_schema;") conn.commit() # 后续正常执行数据库操作
为什么之前的尝试无效
- 仅移除
options前的&但未正确编码空格,PG14对URL参数的格式校验更严格,未编码的空格会导致参数解析失败 - 移除
-c是错误操作,-c是PostgreSQL指定配置参数的必填前缀,不能省略 - 未找到替代
options设置search_path的正确方式,所以无效
内容的提问来源于stack exchange,提问作者SkyWalker
相关产品推荐
相关产品推荐

