一个说法,我想:如何通过SQL查询使用psql为包含双引号
psql -c "COPY (SELECT * FROM "Users" LIMIT 10) TO STDOUT WITH CSV HEADER" > out.csv
内查询("Users"
),但双引号被移除和psql将返回错误Relation users does not exist
。我试图逃避像这样的报价\"Users\"
。但他们仍然被删除。我能做什么?
一个说法,我想:如何通过SQL查询使用psql为包含双引号
psql -c "COPY (SELECT * FROM "Users" LIMIT 10) TO STDOUT WITH CSV HEADER" > out.csv
内查询("Users"
),但双引号被移除和psql将返回错误Relation users does not exist
。我试图逃避像这样的报价\"Users\"
。但他们仍然被删除。我能做什么?
这里是正确的答案(我的作品):
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
psql -c 'COPY (SELECT * FROM "Users" LIMIT 10) TO STDOUT WITH CSV HEADER' > out.csv
在bash中,您可以在字符串中使用单引号,前提是您不需要插入任何内容。当然,如果您的查询中包含单引号,这是行不通的,但在你的情况,你应该罚款
当我必须在我的SQL查询中使用双引号和单引号时,我可以做些什么? – user606521 2014-09-27 20:18:55
我试过你写的东西,但它仍然从查询中删除双引号 - 也许这是由psql出于某种原因完成的? – user606521 2014-09-27 20:20:23
另一个很好的理由,以避免需要引用标识符... – 2014-09-27 22:27:39
所以你说,所有的表名和列名应为小写? – user606521 2014-09-27 23:14:35