PostgreSQL şeması için tüm tabloları CSV'ye nasıl dökebilirim?


11

İçinde çok şemaları olan bir veritabanı var ve her tablo içeriğini CSV dökümü istiyorum. COPY komutunun farkındayım, ancak bir şemadaki tüm tabloları okuyacak ve kendilerine karşı KOPYALAMA yürütecek bir şey nasıl komut dosyası oluşturulacağından emin değilim.

Yanıtlar:


18

İşte istediğinizi yapabilen bir kabuk betiği:

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 ve SCHEMA değişkenlerini kendi veritabanınıza ve şemanıza ayarladığınızdan emin olun.

Kaydırma psql komutu, c komutuna iletilen dizeden tabloların bir listesini yapmak için A ve t bayraklarını kullanır.


3

Tüm şemaları dışa aktarmanız gerekiyorsa, işte komut dosyası

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.