使用psql连接字符串指定脚本路径时斜杠丢失,如何正确转义?
解决psql连接字符串中options路径斜杠丢失的问题
我之前在Windows环境下用psql连接字符串执行脚本时,也踩过这个路径斜杠丢失的坑!问题核心在于Windows的反斜杠(\)在字符串里会被当作转义字符,导致psql解析时丢失了这些斜杠,进而找不到脚本文件。给你几个亲测有效的解决方法:
方法1:用双反斜杠转义
把路径里的单个反斜杠替换成两个,让连接字符串能正确识别真实路径:
user=postgres password=xxxx hostaddr=xxxx port=5432 dbname=xxx options='-f D:\\scripts2\\201804130713_test.sql'
原理很简单:单个\在字符串中是转义标记,两个\\会被解析成一个真实的\,psql就能准确定位到脚本文件了。
方法2:改用正斜杠(更省心)
Windows系统本身支持用正斜杠(/)作为路径分隔符,而且完全不需要转义,直接替换就行:
user=postgres password=xxxx hostaddr=xxxx port=5432 dbname=xxx options='-f D:/scripts2/201804130713_test.sql'
这个方法最省事,避免了转义的繁琐,大部分Windows下的CLI工具都能识别这种路径写法。
方法3:如果是在编程代码中构造命令
如果你是在Python、PowerShell等编程环境里生成这个连接字符串,还要注意外层代码的转义规则:
- 比如Python里可以用原始字符串(前缀加
r),这样反斜杠不会被转义:conn_str = r"user=postgres password=xxxx hostaddr=xxxx port=5432 dbname=xxx options='-f D:\scripts2\201804130713_test.sql'" - 要是在Batch脚本里,可能需要用
^转义,但这种场景下用正斜杠依然是更稳妥的选择。
你可以先试试方法2,大概率直接就能解决问题!如果还是有异常,再检查下是否有外层代码的额外转义影响。
内容的提问来源于stack exchange,提问作者Danny Ellis Jr.




