जवाबों:
Psql की मदद से ( \?
):
\ o [फ़ाइल] फ़ाइल या पाइप के लिए सभी क्वेरी परिणाम भेजें
आदेशों का क्रम इस तरह दिखेगा:
[wist@scifres ~]$ psql db
Welcome to psql 8.3.6, the PostgreSQL interactive terminal
db=>\o out.txt
db=>\dt
db=>\q
\o
फिर से इसे बंद कर देता है।
\?
फाइल में नहीं जाता है। :(
\o queries-output.txt
बाद के सभी ओ / पी को पुनर्निर्देशित करता है नामांकित queries-output.txt
और टाइप करने के लिए \o
( psql प्रांप्ट पर फिर से) इस पुनर्निर्देशन व्यवहार को पुनः प्राप्त करता है।
स्तोत्र \o
आदेश पहले से ही jhwist द्वारा वर्णित किया गया था।
एक वैकल्पिक दृष्टिकोण COPY TO
सर्वर पर एक फाइल पर सीधे लिखने के लिए कमांड का उपयोग कर रहा है। इसका यह लाभ है कि यह आपकी पसंद के आसान-से-पार्स प्रारूप में डंप हो गया है - बजाय Psql के सारणीबद्ध प्रारूप में। किसी अन्य तालिका / डेटाबेस का उपयोग करना भी बहुत आसान हैCOPY FROM
।
नायब! इसके लिए सुपरसुसर विशेषाधिकारों की आवश्यकता होती है और यह सर्वर पर एक फाइल को लिखेगा ।
उदाहरण: COPY (SELECT foo, bar FROM baz) TO '/tmp/query.csv' (format csv, delimiter ';')
';' के साथ CSV फ़ाइल बनाता है क्षेत्र विभाजक के रूप में।
हमेशा की तरह, विवरण के लिए प्रलेखन देखें
\copy
जो किसी भी उपयोगकर्ता के लिए पोस्टग्रेज कमांड काम कर सकता है। पता नहीं कि यह \ dt के लिए काम करता है या नहीं, लेकिन सामान्य सिंटैक्स को निम्न लिंक से पुन: प्रस्तुत किया जाता है, SQL कॉपी सिंटैक्स पोस्टग्रैट्स
\copy (select * from tempTable limit 100) to 'filenameinquotes' with header delimiter as ','
ऊपर एक csv फ़ाइल के रूप में दिए गए फ़ाइल नाम में चयनित क्वेरी के आउटपुट को सहेजा जाएगा
संपादित करें:
मेरे psql सर्वर के लिए निम्न कमांड काम करता है यह एक पुराना संस्करण v8.5 है
copy (select * from table1) to 'full_path_filename' csv header;
यदि आपको निम्न त्रुटि मिली
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
सीएसवी फ़ाइल में परिणाम को स्टोर करने के लिए नीचे क्वेरी का उपयोग करें
\ 'फ़ाइल पथ' सीएसवी हेडर के लिए \ कॉपी (आपकी क्वेरी);
उदाहरण
\ copy (सेलेक्ट नाम, डेट_ऑर्डर खरीद_ऑर्डर से) '/home/ankit/Desktop/result.csv' cv हेडर;
आशा है कि यह आपकी मदद करेगा।
मुझे लगता है कि इसके लिए कुछ आंतरिक psql कमांड मौजूद है, लेकिन आप script
कमांड को उपयोग -लिनक्स-एनजी पैकेज से भी चला सकते हैं :
विवरण स्क्रिप्ट आपके टर्मिनल पर छपी हर चीज का एक प्रकार बनाती है।
यह दृष्टिकोण किसी भी psql कमांड के साथ सरलतम से सबसे जटिल तक मूल कमांड के किसी भी परिवर्तन या समायोजन की आवश्यकता के बिना काम करेगा ।
नोट: लिनक्स सर्वर के लिए।
नमूना
read -r -d '' FILE_CONTENT << 'HEREDOC'
[COMMAND_CONTENT]
HEREDOC
echo -n "$FILE_CONTENT" > sqlcmd
उदाहरण
read -r -d '' FILE_CONTENT << 'HEREDOC'
DO $f$
declare
curid INT := 0;
vdata BYTEA;
badid VARCHAR;
loc VARCHAR;
begin
FOR badid IN SELECT some_field FROM public.some_base LOOP
begin
select 'ctid - '||ctid||'pagenumber - '||(ctid::text::point) [0]::bigint
into loc
from public.some_base where some_field = badid;
SELECT file||' '
INTO vdata
FROM public.some_base where some_field = badid;
exception
when others then
raise notice 'Block/PageNumber - % ',loc;
raise notice 'Corrupted id - % ', badid;
--return;
end;
end loop;
end;
$f$;
HEREDOC
echo -n "$FILE_CONTENT" > sqlcmd
नमूना
sudo -u postgres psql [some_db] -c "$(cat sqlcmd)" >>sqlop 2>&1
उदाहरण
sudo -u postgres psql some_db -c "$(cat sqlcmd)" >>sqlop 2>&1
cat sqlop
किया हुआ! धन्यवाद! = D
कर्ता के लिए दृष्टिकोण
psql कमांड के माध्यम से
docker exec -i %containerid% psql -U %user% -c '\dt' > tables.txt
या sql फ़ाइल से क्वेरी
docker exec -i %containerid% psql -U %user% < file.sql > data.txt