从 PowerShell 运行时转义 psql 命令中的引号

Mar*_*ius 2 powershell psql

& "psql" "-d" "yourdb" "-h" "localhost" "-p" "5432" "-U" "youruser" "-c" "select foo from bar where data @> `'{ `"key`" : `"value`" }`';"
Run Code Online (Sandbox Code Playgroud)

错误:json 类型的输入语法无效
第 1 行:...foo from bar where data @> '{ key...

如何转义该命令字符串以免psql抛出?

Ans*_*ers 7

推荐的方法是使用Npgsql或psqlODBC驱动程序,因为它们在处理基本上所有内容(连接、参数、结果、错误等)时具有许多优势。

但是,如果您坚持使用命令行客户端,则可以通过添加反斜杠来修复语法错误,以转义外部命令执行时的嵌套双引号(反引号只是为了将它们转义给 PowerShell 解析器):

"SELECT foo FROM bar WHERE data @> '{ \`"key\`" : \`"value\`" }';"
#                                     ^     ^     ^       ^
Run Code Online (Sandbox Code Playgroud)

单引号不需要转义。

我还建议使用splatting来传递参数:

$params = '-d', 'yourdb',
          '-h', 'localhost',
          '-p', 5432,
          '-U', 'youruser',
          '-c', "SELECT foo FROM bar WHERE data @> '{\`"key\`":\`"value\`"}';"

& 'psql.exe' @params
Run Code Online (Sandbox Code Playgroud)

psql.exe请注意,如果包含可执行文件的目录不在 PATH 环境变量中,则必须使用其(绝对或相对)路径进行调用。

  • 非常感谢您的“反斜杠”提示。节省了几个小时。 (3认同)