$ psql -E --host=xxx --port=yyy --username=chi --dbname=C_DB -c 'DELETE FROM "Stock_Profile" WHERE "Symbol" = 'MSFT'; '
错误:列“msft”不存在 第1行:从“Stock_Profile”删除WHERE“符号”= MSFT;
如何向psql显示MSFT是字符串?
它不喜欢'MSFT',''MSFT'或''MSFT''
答案 0 :(得分:0)
这是因为就psql而言,MSFT之前的单引号会终止字符串。
正如@imsop所指出的,当从表名和列名中删除双引号时,不保留区分大小写,因此在需要时可以使用反斜杠(\
)来转义双引号。
psql -E --host=xxx --port=yyy --username=chi --dbname=C_DB -c "DELETE FROM \"Stock_Profile\" WHERE \"Symbol\" = 'MSFT';"
答案 1 :(得分:0)
你遇到的问题是你已经用完了各种引号来嵌套;分手了,我们有:
psql
命令;这可以是单引号或双引号在您给出的示例中:
psql -E --host=xxx --port=yyy --username=chi --dbname=C_DB -c 'DELETE FROM "Stock_Profile" WHERE "Symbol" = 'MSFT'; '
shell看到两个单引号字符串:
'DELETE FROM "Stock_Profile" WHERE "Symbol" = '
所以问题不在于psql,而是在shell本身。
根据您使用的shell,单引号字符串可能不接受任何转义(因此\'
没有帮助),但双引号字符串可能会这样做。因此,您可以尝试在外部查询上使用双引号,并在表名称周围转义它们:
psql -E --host=xxx --port=yyy --username=chi --dbname=C_DB -c "DELETE FROM \"Stock_Profile\" WHERE \"Symbol\" = 'MSFT'; "
现在\"
不会结束字符串,因此shell会将其视为单个字符串:
"DELETE FROM \"Stock_Profile\" WHERE \"Symbol\" = 'MSFT'; "
并将其传递给psql并处理转义,从而生成所需的SQL:
DELETE FROM "Stock_Profile" WHERE "Symbol" = 'MSFT';