मैं PostgreSQL स्कीमा के लिए CSV में सभी तालिकाओं को कैसे डंप कर सकता हूं?


11

मेरे पास बहुत सारे स्कीमा के साथ एक डेटाबेस है और मैं प्रत्येक तालिका सामग्री को सीएसवी में डंप करना चाहता हूं। मुझे COPY कमांड के बारे में पता है, लेकिन मुझे यकीन नहीं है कि किसी ऐसी स्क्रिप्ट को कैसे लिखा जाए जो स्कीमा के सभी टेबल को पढ़े और उनके खिलाफ COPY निष्पादित करें।

जवाबों:


18

यहाँ एक शेल स्क्रिप्ट है जो आप चाहते हैं:

SCHEMA="myschema"
DB="mydb"

psql -Atc "select tablename from pg_tables where schemaname='$SCHEMA'" $DB |\
  while read TBL; do
    psql -c "COPY $SCHEMA.$TBL TO STDOUT WITH CSV" $DB > $TBL.csv
  done

सुनिश्चित करें कि आप अपने विशेष डेटाबेस और स्कीमा में DB और SCHEMA चर सेट करते हैं।

रैपिंग psql कमांड, c कमांड को पास किए गए स्ट्रिंग से तालिकाओं की सूची बनाने के लिए A और t झंडे का उपयोग करता है।


3

यदि आपको सभी स्कीमा निर्यात करने की आवश्यकता है, तो यहां स्क्रिप्ट है

PGDATABASE="db"
PGUSER="user"

psql -Atc "select schema_name from information_schema.schemata" |\
    while read SCHEMA; do
    if [[ "$SCHEMA" != "pg_catalog" && "$SCHEMA" != "information_schema" ]]; then
        psql -Atc "select tablename from pg_tables where schemaname='$SCHEMA'" |\
            while read TBL; do
                psql -c "COPY $SCHEMA.$TBL TO STDOUT WITH CSV DELIMITER ';' HEADER ENCODING 'UTF-8'" > $SCHEMA.$TBL.csv
            done
    fi
    done
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.