如何将SQL查询作为包含双引号的参数传递给psql

时间:2014-09-27 19:46:43

标签: macos bash postgresql psql

我想:

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

然而,查询("Users")中的双引号被删除,psql返回Relation users does not exist的错误。我试图逃避这个\"Users\"的引号。但他们仍然被删除。我该怎么办?

2 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:3)

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

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