当来自 PowerShell 的 运行 时,在 psql 命令中转义引号
Escape quotes in psql command when running from PowerShell
& "psql" "-d" "yourdb" "-h" "localhost" "-p" "5432" "-U" "youruser" "-c" "select foo from bar where data @> `'{ `"key`" : `"value`" }`';"
ERROR: invalid input syntax for type json
LINE 1: ...foo from bar where data @> '{ key...
如何转义该命令字符串以便 psql
不会抛出?
推荐的方法是使用 Npgsql or psqlODBC 驱动程序,因为它们在处理基本上所有内容(连接、参数、结果、错误等)时具有许多优势。
但是,如果您坚持使用命令行客户端,您可以通过添加反斜杠来修复语法错误,以转义执行外部命令的嵌套双引号(反引号只是为了让 PowerShell 解析器转义它们) :
"SELECT foo FROM bar WHERE data @> '{ \`"key\`" : \`"value\`" }';"
# ^ ^ ^ ^
单引号不需要转义。
我还建议使用 splatting 来传递参数:
$params = '-d', 'yourdb',
'-h', 'localhost',
'-p', 5432,
'-U', 'youruser',
'-c', "SELECT foo FROM bar WHERE data @> '{\`"key\`":\`"value\`"}';"
& 'psql.exe' @params
请注意,如果包含可执行文件的目录不在您的 PATH 环境变量中,则必须使用其(绝对或相对)路径调用 psql.exe
。
& "psql" "-d" "yourdb" "-h" "localhost" "-p" "5432" "-U" "youruser" "-c" "select foo from bar where data @> `'{ `"key`" : `"value`" }`';"
ERROR: invalid input syntax for type json
LINE 1: ...foo from bar where data @> '{ key...
如何转义该命令字符串以便 psql
不会抛出?
推荐的方法是使用 Npgsql or psqlODBC 驱动程序,因为它们在处理基本上所有内容(连接、参数、结果、错误等)时具有许多优势。
但是,如果您坚持使用命令行客户端,您可以通过添加反斜杠来修复语法错误,以转义执行外部命令的嵌套双引号(反引号只是为了让 PowerShell 解析器转义它们) :
"SELECT foo FROM bar WHERE data @> '{ \`"key\`" : \`"value\`" }';"
# ^ ^ ^ ^
单引号不需要转义。
我还建议使用 splatting 来传递参数:
$params = '-d', 'yourdb',
'-h', 'localhost',
'-p', 5432,
'-U', 'youruser',
'-c', "SELECT foo FROM bar WHERE data @> '{\`"key\`":\`"value\`"}';"
& 'psql.exe' @params
请注意,如果包含可执行文件的目录不在您的 PATH 环境变量中,则必须使用其(绝对或相对)路径调用 psql.exe
。