2017-02-22 6 views
10

के लिए psql की \ copy का उपयोग करें यह this answer से Save PL/pgSQL output from PostgreSQL to a CSV file "के लिए एक अनुवर्ती प्रश्न है।बहु-पंक्ति क्वेरी

मुझे psql के \copy command का उपयोग कर क्लाइंट-साइड सीएसवी फ़ाइल लिखने की आवश्यकता है। एक एक लाइनर काम करता है:

db=> \copy (select 1 AS foo) to 'bar.csv' csv header 
COPY 1 

हालांकि, मैं लंबे समय से प्रश्नों कि कई लाइनों अवधि की है।

db=> \copy (
\copy: parse error at end of line 
db=> \copy (\\ 
\copy: parse error at end of line 
db=> \copy (" 
\copy: parse error at end of line 
db=> \copy "(
\copy: parse error at end of line 
db=> \copy \\ 
\copy: parse error at end of line 

यह एक प्रश्न है कि कई पंक्तियों तक फैला के साथ \copy उपयोग करना संभव है: के रूप में मैं एक पार्स त्रुटि के बिना इस पिछले एक लाइन का विस्तार नहीं कर पा रहे मैं, क्वेरी दिखाने की जरूरत नहीं है? मैं विंडोज़ पर psql का उपयोग कर रहा हूँ।

+0

आपको शायद न्यूलाइन से बचना होगा? – Falmarri

+0

@ फाल्मररी मैंने अपने प्रश्न में कुछ सामान्य बचने के प्रयास किए हैं, लेकिन दस्तावेज़ों से "psql ... बैकस्लैश भाग निकलता है" लागू नहीं होता है, जो चीजों को मुश्किल बनाता है। –

+0

मैंने उसे एक उत्तर पोस्ट किया है: http://stackoverflow.com/a/44043716/24105 जो एकाधिक लाइनों को पाने के लिए एक चौराहे का तरीका है। –

उत्तर

11

मेरे पास अभी काम करने वाला समाधान create a temporary view है, जिसे एकाधिक लाइनों पर घोषित किया जा सकता है, फिर \copy कमांड में से चुनें, जो एक पंक्ति पर आराम से फिट बैठता है।

db=> CREATE TEMP VIEW v1 AS 
db-> SELECT i 
db-> FROM generate_series(1, 2) AS i; 
CREATE VIEW 
db=> \cd /path/to/a/really/deep/directory/structure/on/client 
db=> \copy (SELECT * FROM v1) TO 'out.csv' csv header 
COPY 2 
db=> DROP VIEW v1; 
DROP VIEW 
+0

क्या आपको अस्थायी रूप से दृश्य को स्पष्ट रूप से हटाने की आवश्यकता है? – nyxz

+1

@nyxz यह सही है, आपको इस दृश्य को छोड़ने की आवश्यकता नहीं है। यह केवल तभी जरूरी हो सकता है यदि आपके पास 'v1' के साथ प्रक्रिया करने के लिए कई प्रश्न हैं। –

संबंधित मुद्दे