दिलचस्प पोस्ट
फ़ॉर्म सबमिशन के बाद टेक्स्टरेआ के मूल्य को रीसेट करें सभी निकालें लेकिन NSString से संख्याएं जावास्क्रिप्ट में ओवरलोडिंग अंकगणित ऑपरेटर्स? मैं ASP.NET और SQL सर्वर के बीच एक कनेक्शन पूल समस्या कैसे हल कर सकता हूँ? ग्रहण में ग्रहण: कदम से कदम स्थापना iOS8.1 सिम्युलेटर हमेशा जर्मन कीबोर्ड कीबोर्ड के बावजूद यूएस कीबोर्ड लेआउट का उपयोग करता है सीएसएस: कुछ तत्वों को सामग्री जोड़ने के बाद नहीं टीएसक्यूएल का उपयोग कर डेटाबेस में सभी तालिकाओं की सूची कैसे प्राप्त करूं? पायथन के __repr__ का उद्देश्य हाइबरनेट वैलिएटर (JSR 303) के साथ क्रॉस फील्ड मान्यता रेल 3 में मॉड्यूल / वर्ग को उदारीकरण फ़ोल्डर से लोड करने का सर्वोत्तम तरीका? मैं आईओएस में उपयोगकर्ता से वर्तमान स्थान कैसे प्राप्त करूं? फाइल या असेंबली को लोड नहीं किया जा सका 'न्यूटॉन्सफ्ट। जेसन, संस्करण = 4.5.0.0, संस्कृति = तटस्थ, पब्लिककेय टोकन = 30 एडी 4 एफ 6 बी 2 ए 6 ए' एक ArrayList का उपयोग कर एक ListView जनसंख्या? Sendmail Wamp Php

पीपी / पीजीएसक्यूएल आउटपुट को पोस्टग्रेएसक्यूएल से एक सीएसवी फ़ाइल में सहेजें

पीएसएल / पीजीएसक्यूएल आउटपुट को एक सीएसवी फाइल में पोस्टग्रेएसक्यूएल डाटाबेस से बचाने का सबसे आसान तरीका क्या है?

मैं PostgreSQL 8.4 का उपयोग pgAdmin III और PSQL प्लगइन के साथ कर रहा हूँ, जहां मैं क्वेरी से चलाता हूं।

वेब के समाधान से एकत्रित समाधान "पीपी / पीजीएसक्यूएल आउटपुट को पोस्टग्रेएसक्यूएल से एक सीएसवी फ़ाइल में सहेजें"

क्या आप सर्वर पर, या क्लाइंट पर परिणामी फ़ाइल चाहते हैं?

सर्वर साइड

यदि आप कुछ आसान उपयोग या स्वचालित करने के लिए चाहते हैं, तो आप Postgresql COPY कमांड में बनाया का उपयोग कर सकते हैं। जैसे

Copy (Select * From foo) To '/tmp/test.csv' With CSV DELIMITER ','; 

यह दृष्टिकोण दूरस्थ सर्वर पर पूरी तरह से चलाता है – यह आपके स्थानीय पीसी में नहीं लिख सकता है इसे पोस्टग्रेज़ "सुपरयुजर" (सामान्यतः "रूट" कहा जाता है) के रूप में चलाने की आवश्यकता होती है क्योंकि पोस्टग्रेस उस मशीन की स्थानीय फाइल सिस्टम के साथ खराब चीजों को रोक नहीं सकता।

इसका मतलब वास्तव में नहीं है कि आपको सुपरयूसर के रूप में जोड़ा जाना चाहिए (स्वचालित करना जो कि एक अलग तरह का सुरक्षा जोखिम होगा), क्योंकि आप फ़ंक्शन को बनाने के लिए SECURITY DEFINER विकल्प का उपयोग कर सकते हैं , जो फ़ंक्शन को चलाता है जैसे कि आप एक थे सुपरयुजर

महत्वपूर्ण हिस्सा यह है कि आपका फ़ंक्शन अतिरिक्त चेक को पूरा करने के लिए है, न केवल सुरक्षा से गुजरती- तो आप उस फ़ंक्शन को लिख सकते हैं जो आपको आवश्यक सटीक डेटा निर्यात करता है, या आप कुछ लिख सकते हैं जो कि जब तक वे विभिन्न विकल्पों को स्वीकार कर सकते हैं एक सख्त व्हाइटलास्ट से मिलने आपको दो चीजों की जांच करने की ज़रूरत है:

  1. उपयोगकर्ता को डिस्क पर पढ़ने / लिखने के लिए कौन सी फाइलों की अनुमति होनी चाहिए? यह एक विशेष निर्देशिका हो सकती है, उदाहरण के लिए, और फ़ाइल नाम में एक उपयुक्त उपसर्ग या एक्सटेंशन हो सकता है
  2. उपयोगकर्ता डेटाबेस को पढ़ने / लिखने में सक्षम होने के लिए कौन सी तालिकाएं चाहिए? यह सामान्य रूप से डेटाबेस में GRANT द्वारा परिभाषित किया जाता है, लेकिन फ़ंक्शन अब सुपरयुजर के रूप में चल रहा है, इसलिए तालिकाओं जो सामान्य रूप से "सीमा के बाहर" पूरी तरह से सुलभ होंगे आप संभवत: किसी को अपने फ़ंक्शन को आमंत्रित करने और अपने "उपयोगकर्ताओं" तालिका के अंत में पंक्तियां जोड़ना नहीं चाहेंगे …

मैंने इस दृष्टिकोण पर विस्तार करने वाला एक ब्लॉग पोस्ट लिखा है , जिसमें कार्य करने वाले कुछ उदाहरणों को शामिल किया गया है , जो कि निर्यात (या आयात) फ़ाइलें और तालिकाओं को कठोर परिस्थितियों से मेल खाती है


ग्राहक की ओर

दूसरा तरीका ग्राहक की तरफ से फाइल हैंडलिंग करना है , अर्थात आपकी एप्लिकेशन या स्क्रिप्ट में। पोस्टग्रेस सर्वर को यह जानना जरूरी नहीं है कि आप जिस फ़ाइल की प्रतिलिपि बना रहे हैं, यह सिर्फ डाटा को बाहर कर देती है और क्लाइंट कहीं कहता है।

इसके लिए अंतर्निहित सिंटैक्स कमांड में COPY TO STDOUT को COPY TO STDOUT , और पीजीएडीएमएन जैसे ग्राफिकल टूल आपके लिए इसे एक अच्छे संवाद में लपेटेंगे।

psql कमांड-लाइन क्लाइंट में एक विशेष "मेटा-कमांड" नामक \copy , जो "वास्तविक" COPY के समान सभी विकल्प लेता है, लेकिन क्लाइंट के अंदर चलाया जाता है:

 \copy (Select * From foo) To '/tmp/test.csv' With CSV 

ध्यान दें कि कोई समापन नहीं है ; , क्योंकि मेटा-कमांड को न्यूलाइन द्वारा समाप्त कर दिया गया है, एसक्यूएल आज्ञाओं के विपरीत

डॉक्स से :

पीपीएलएल निर्देश \ कॉपी के साथ सीपीआईई को भ्रमित न करें। \ copy एसटीडीआईएन या कॉपी से STDOUT को कॉपी आवंटित करता है, और फिर psql क्लाइंट के लिए एक फ़ाइल में डेटा को संग्रह / स्टोर करता है। इस प्रकार, फ़ाइल को एक्सेस करने और पहुंच के अधिकार क्लाइंट पर निर्भर करते हैं, बजाय जब सर्वर का उपयोग किया जाता है।

आपकी एप्लिकेशन प्रोग्रामिंग भाषा में डेटा को पुश करने या प्राप्त करने के लिए समर्थन भी हो सकता है , लेकिन आप आम तौर पर एक मानक SQL कथन के भीतर COPY FROM STDIN / TO STDOUT COPY FROM STDIN नहीं कर सकते, क्योंकि इनपुट / आउटपुट स्ट्रीम को जोड़ने का कोई तरीका नहीं है। पीएचपी के पोस्टग्रेएसक्यूएल हैंडलर (पीडीओ में नहीं ) में बहुत मूल pg_copy_from और pg_copy_to फ़ंक्शंस शामिल हैं जो PHP सरणी से कॉपी करते हैं, जो बड़े डेटा सेटों के लिए कुशल नहीं हो सकता है।

कई समाधान हैं:

1 psql कमांड

psql -d dbname -t -A -F"," -c "select * from users" > output.csv

इसका बड़ा फायदा यह है कि आप इसे एसएसएच के माध्यम से उपयोग कर सकते हैं, जैसे कि ssh postgres@host command – आपको प्राप्त करने में सक्षम बनाना

2 पोस्टग्रेज़ copy कमांड

COPY (SELECT * from users) To '/tmp/output.csv' With CSV;

3 psql इंटरैक्टिव (या नहीं)

 >psql dbname psql>\f ',' psql>\a psql>\o '/tmp/output.csv' psql>SELECT * from users; psql>\q 

उन सभी को स्क्रिप्ट में इस्तेमाल किया जा सकता है, लेकिन मुझे पसंद है # 1

4 pgadmin लेकिन वह स्क्रिप्ट योग्य नहीं है

टर्मिनल में (डीबी से कनेक्ट होने पर) आउटपुट को सीवीएस फाइल में सेट करें

1) फ़ील्ड सेपरेटर को ',' लिए सेट करें:

 \f ',' 

2) सेट आउटपुट स्वरूप अनजान करें:

 \a 

3) केवल ट्यूपल्स दिखाएं:

 \t 

4) आउटपुट सेट करें:

 \o '/tmp/yourOutputFile.csv' 

5) अपनी क्वेरी निष्पादित करें:

 :select * from YOUR_TABLE 

6) आउटपुट:

 \o 

फिर आप इस स्थान पर अपनी सीएसवी फ़ाइल पा सकेंगे:

 cd /tmp 

इसे scp कमांड का उपयोग करके कॉपी करें या नैनो का उपयोग कर संपादित करें:

 nano /tmp/yourOutputFile.csv 

यदि आप हेडर के साथ किसी विशेष तालिका के सभी कॉलम में रुचि रखते हैं, तो आप उपयोग कर सकते हैं

 COPY table TO '/some_destdir/mycsv.csv' WITH CSV HEADER; 

यह एक छोटे से सरल है

 COPY (SELECT * FROM table) TO '/some_destdir/mycsv.csv' WITH CSV HEADER; 

जो मेरे ज्ञान का सबसे अच्छा है, समकक्ष हैं।

मुझे \ COPY का उपयोग करना पड़ा क्योंकि मुझे त्रुटि संदेश मिला है:

 ERROR: could not open file "/filepath/places.csv" for writing: Permission denied 

तो मैंने इसका इस्तेमाल किया:

 \Copy (Select address, zip From manjadata) To '/filepath/places.csv' With CSV; 

और यह काम कर रहा है

psql आपके लिए यह कर सकता है:

 edd@ron:~$ psql -d beancounter -t -A -F"," \ -c "select date, symbol, day_close " \ "from stockprices where symbol like 'I%' " \ "and date >= '2009-10-02'" 2009-10-02,IBM,119.02 2009-10-02,IEF,92.77 2009-10-02,IEV,37.05 2009-10-02,IJH,66.18 2009-10-02,IJR,50.33 2009-10-02,ILF,42.24 2009-10-02,INTC,18.97 2009-10-02,IP,21.39 edd@ron:~$ 

यहां इस्तेमाल किए गए विकल्पों पर मदद के लिए man psql देखें

PgAdmin III में क्वेरी विंडो से फाइल करने के लिए निर्यात करने का एक विकल्प है। मुख्य मेनू में यह क्वेरी है -> फ़ाइल को निष्पादित करें या एक ऐसा बटन है जो एक ही चीज़ करता है (यह एक नीली फ्लॉपी डिस्क के साथ एक हरा त्रिकोण है, जो कि सादे हरी त्रिकोण के विपरीत है जो अभी क्वेरी चलाता है)। यदि आप क्वेरी विंडो से क्वेरी नहीं चला रहे हैं तो मैं क्या करूँगा IMSoP का सुझाव दिया और कॉपी आदेश का उपयोग करें

मैं एडब्लूएस रेडिशफ्ट पर काम कर रहा हूं, जो सुविधा के लिए COPY TO समर्थन नहीं करता है

मेरी BI उपकरण टैब-सीमांकित सीएसवी का समर्थन करता है, इसलिए मैंने निम्न का उपयोग किया:

  psql -h dblocation -p port -U user -d dbname -F $'\t' --no-align -c " SELECT * FROM TABLE" > outfile.csv 

मैंने एक छोटे उपकरण लिखा है जिसे psql2csv कहा जाता है जो COPY query TO STDOUT psql2csv करता है, जिसके परिणामस्वरूप उचित सीएसवी। यह इंटरफ़ेस psql समान है

 psql2csv [OPTIONS] < QUERY psql2csv [OPTIONS] QUERY 

क्वेरी को एसटीडीआईएन की सामग्री माना जाता है, यदि मौजूद है, या अंतिम तर्क। इन सभी को छोड़कर अन्य सभी तर्क psql को भेजे जाते हैं:

 -h, --help show help, then exit --encoding=ENCODING use a different encoding than UTF8 (Excel likes LATIN1) --no-header do not output a header 

यदि आपके पास अधिक क्वेरी है और आप psql का उपयोग करना चाहते हैं, तो अपनी क्वेरी को एक फ़ाइल में डालें और निम्न कमांड का उपयोग करें:

 psql -d my_db_name -t -A -F";" -f input-file.sql -o output-file.csv 

जैकडीबी , जो आपके वेब ब्राउजर में डेटाबेस क्लाइंट है, यह वास्तव में आसान है। खासकर अगर आप हेरोोकू पर हैं

यह आपको रिमोट डेटाबेस से कनेक्ट करने और उन पर एसक्यूएल प्रश्नों को चलाने देता है।

स्रोत जैकडीब-होरोकू http://static.jackdb.com/assets/img/blog/jackdb-heroku-oauth-connect.gif


एक बार आपका डीबी जुड़ा हुआ है, आप एक क्वेरी चला सकते हैं और सीएसवी या टीएक्सटीक्स को देख सकते हैं (नीचे सही देखें)।


jackdb निर्यात

नोट: मैं जैकडीबी से संबद्ध किसी भी तरीके से नहीं हूं। मैं वर्तमान में उनकी मुफ्त सेवाओं का उपयोग करता हूं और लगता है कि यह एक महान उत्पाद है।