2014-09-27 85 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

相關問題