gpt4 book ai didi

postgresql - 为什么 psql 不能识别我的单引号?

转载 作者:行者123 更新时间:2023-11-29 13:54:15 24 4
gpt4 key购买 nike

$ psql -E --host=xxx --port=yyy --username=chi --dbname=C_DB -c 'DELETE FROM "Stock_Profile" WHERE "Symbol" = 'MSFT'; '

错误:列“msft”不存在第 1 行:从“Stock_Profile”中删除,其中“Symbol”= MSFT;

如何向 psql 显示 MSFT 是一个字符串?

它不喜欢 'MSFT'、\'MSFT\' 或 ''MSFT''

最佳答案

您遇到的问题是您已经用完了可嵌套的引号类型;分开,我们有:

  1. 您的 shell 需要将单个字符串传递给 psql 命令;这可以是单引号或双引号
  2. 您的表名是大小写混合的,因此需要用双引号引起来
  3. 您的字符串需要用单引号引起来

在你给出的例子中:

psql -E --host=xxx --port=yyy --username=chi --dbname=C_DB -c 'DELETE FROM "Stock_Profile" WHERE "Symbol" = 'MSFT'; '

shell 看到两个单引号字符串:

  • '从“Stock_Profile”中删除,其中“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'; 

关于postgresql - 为什么 psql 不能识别我的单引号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35271309/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com