【问题标题】:How to pass SQL query to psql as a argument containing double quotes如何将 SQL 查询作为包含双引号的参数传递给 psql
【发布时间】:2014-09-27 19:46:43
【问题描述】:

我正在尝试:

psql -c "COPY ( SELECT * FROM "Users" LIMIT 10 ) TO STDOUT WITH CSV HEADER" > out.csv

但是查询中的双引号 ("Users") 被删除并且 psql 返回错误 Relation users does not exist。我试图逃避像\"Users\" 这样的引用。但它们仍然被删除。我能做什么?

【问题讨论】:

  • 另一个避免使用需要引用的标识符的好理由...
  • 所以你说所有的表名和列名都应该小写?

标签: macos bash postgresql psql


【解决方案1】:

这是正确的答案(对我有用):

echo 'COPY ( SELECT * FROM "Users" LIMIT 10 ) TO STDOUT WITH CSV HEADER' | psql > out.csv

甚至更好(它允许使用单引号和双引号而无需任何转义):

psql > out.csv <<EOT
COPY
(SELECT id, email, "displayName", "firstName", "lastName", "displayName", 'some str' AS "someStr" FROM "Users" LIMIT 10)
TO STDOUT WITH CSV HEADER;
EOT

【讨论】:

    【解决方案2】:
    psql -c 'COPY ( SELECT * FROM "Users" LIMIT 10 ) TO STDOUT WITH CSV HEADER' > out.csv
    

    在 bash 中,您可以在字符串中使用单引号,前提是您不需要插入任何内容。当然,如果您的查询包含单引号,那是行不通的,但在您的情况下,您应该没问题

    【讨论】:

    • 如果我的 SQL 查询中必须同时使用双引号和单引号,我该怎么办?
    • 我试过你写的,但它仍然从查询中删除双引号 - 也许这是由 psql 出于某种原因完成的?
    猜你喜欢
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 2018-09-07
    • 2013-06-01
    • 2019-07-19
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    相关资源
    最近更新 更多