2014-09-27 81 views
2

一个说法,我想:如何通过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\"。但他们仍然被删除。我能做什么?

+0

另一个很好的理由,以避免需要引用标识符... – 2014-09-27 22:27:39

+0

所以你说,所有的表名和列名应为小写? – user606521 2014-09-27 23:14:35

回答

5

这里是正确的答案(我的作品):

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中,您可以在字符串中使用单引号,前提是您不需要插入任何内容。当然,如果您的查询中包含单引号,这是行不通的,但在你的情况,你应该罚款

+0

当我必须在我的SQL查询中使用双引号和单引号时,我可以做些什么? – user606521 2014-09-27 20:18:55

+0

我试过你写的东西,但它仍然从查询中删除双引号 - 也许这是由psql出于某种原因完成的? – user606521 2014-09-27 20:20:23

相关问题