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

use*_*521 6 postgresql macos bash psql

我在尝试着:

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

但是,query("Users")中的双引号被删除,psql返回错误Relation users does not exist.我试图逃避这样的报价\"Users\".但他们仍然被删除.我能做什么?

use*_*521 8

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

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

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

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
Run Code Online (Sandbox Code Playgroud)


tri*_*rNZ 6

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

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