2011-03-16 9 views
161

मैं डेटाबेस में सभी तालिकाओं को सूचीबद्ध करने के लिए psql के \dt का उपयोग कर रहा हूं। मुझे परिणामों को एक फाइल में सहेजने की ज़रूरत है।psql - एक फ़ाइल में कमांड के परिणाम सहेजें

मुझे यकीन है कि मैंने पहले यह किया है लेकिन वाक्यविन्यास को याद नहीं कर सकता।

धन्यवाद।

+0

यह भी देखें http://stackoverflow.com/questio एनएस/3939329/डाल-उत्पादन-postgres-ए-इनपुट-टु-ए-फ़ाइल से। –

उत्तर

277

से psql की मदद (\?):

\ o [FILE] फ़ाइल या करने के लिए सभी क्वेरी परिणाम भेज | पाइप

आदेशों के अनुक्रम इस तरह दिखेगा:

[[email protected] ~]$ psql db 
Welcome to psql 8.3.6, the PostgreSQL interactive terminal 

db=>\o out.txt 
db=>\dt 
db=>\q 

[[email protected] ~]$ 
+1

क्या मैं इसे \ dt, या संयोजन से पहले कॉल करता हूं? कृपया वाक्यविन्यास धन्यवाद शामिल करें। – pstanton

+52

टाइपिंग '\ o' इसे फिर से बंद कर देता है। –

+2

अफसोस की बात है, '\? 'का आउटपुट फ़ाइल पर नहीं जाता है। :( – blitzen9872

1

मुझे लगता है कि इसके लिए कुछ आंतरिक psql कमांड मौजूद है, लेकिन आपसे script कमांड भी चला सकते हैं 210 पैकेज:

विवरण स्क्रिप्ट आपके टर्मिनल पर मुद्रित सब कुछ की एक प्रकार की सूची बनाता है।

65

psql \o कमांड पहले से ही jhwist द्वारा वर्णित किया गया था।

एक वैकल्पिक दृष्टिकोण सर्वर पर फ़ाइल को सीधे लिखने के लिए COPY TO कमांड का उपयोग कर रहा है। इसका लाभ यह है कि यह आपकी पसंद के एक आसान-से-पार्स प्रारूप में डाला गया है - बजाय psql के टैबलेट प्रारूप के बजाय। COPY FROM का उपयोग करके किसी अन्य तालिका/डेटाबेस में आयात करना भी बहुत आसान है।

एनबी! इसके लिए सुपरसुर विशेषाधिकारों की आवश्यकता होती है और सर्वर पर पर फ़ाइल लिख जाएगी।

उदाहरण: COPY (SELECT foo, bar FROM baz) TO '/tmp/query.csv' (format csv, delimiter ';')

साथ एक CSV फ़ाइल बनाता है ';' क्षेत्र विभाजक के रूप में।

हमेशा की तरह, see the documentation for details

+2

कॉपी के रूप में psql चलाने की कोशिश करें \ nt' – pstanton

+0

वाह के साथ काम नहीं करता है, वास्तव में एक अच्छा दृष्टिकोण – helvete

10

\copy है जो एक postgres आदेश उपयोगकर्ताओं के लिए काम कर सकते हैं। पता नहीं अगर यह या नहीं \ डीटी के लिए काम करता है, लेकिन सामान्य वाक्य रचना नीचे दिए गए लिंक से गयी है Postgres SQL copy syntax

\copy (select * from tempTable limit 100) copy to 'filenameinquotes' with header delimiter as ',' 

ऊपर एक csv फ़ाइल के रूप में प्रदान फ़ाइल नाम में चयन क्वेरी के उत्पादन की बचत होगी

संपादित करें:

मेरे psql सर्वर के लिए निम्न आदेश काम करता है यह एक पुराना संस्करण v8 है।5

copy (select * from table1) to 'full_path_filename' csv header; 
+0

बहुत आसान, धन्यवाद। लेकिन 'कॉपी' में .. कॉपी करें ... 'की आवश्यकता नहीं है - वास्तव में हाल के संस्करणों पर यह कमांड विफल हो जाता है। – Tom

+0

टॉम, मुझे लगता है कि यह एक टाइपो था। मेरे इंस्टॉलेशन pgsql 8.5ver पर काम करने वाले एक के साथ पोस्ट संपादित करें –

0

COPY tablename TO '/tmp/output.csv' DELIMITER ',' CSV HEADER; इस आदेश सीएसवी

1

के रूप में पूरे तालिका स्टोर करने के लिए प्रयोग किया जाता है आपको निम्न त्रुटि ufgtoolspg=> COPY (SELECT foo, bar FROM baz) TO '/tmp/query.csv' (format csv, delimiter ';') ; ERROR: must be superuser to COPY to or from a file HINT: Anyone can COPY to stdout or from stdin. psql's \copy command also works for anyone.

आप इस तरह से चला सकते हैं मिल गया है:

psql somepsqllink_or_credentials -c "COPY (SELECT foo, bar FROM baz) TO STDOUT (format csv, delimiter ';')" > baz.csv