Bagaimana saya bisa membuang semua tabel ke CSV untuk skema PostgreSQL?

11

Saya memiliki database dengan banyak skema di dalamnya dan saya ingin membuang masing-masing isi tabel ke CSV. Saya mengetahui perintah COPY tetapi saya tidak yakin bagaimana cara skrip sesuatu yang akan membaca semua tabel dalam suatu skema dan mengeksekusi COPY terhadap mereka.

robertpostill
sumber

Jawaban:

18

Inilah skrip shell yang dapat melakukan apa yang Anda inginkan:

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

Pastikan Anda mengatur variabel DB dan SCHEMA ke database dan skema tertentu.

Perintah psql pembungkus menggunakan bendera A dan t untuk membuat daftar tabel dari string yang diteruskan ke perintah c.

Ziggy Crueltyfree Zeitgeister
sumber
3

Jika Anda perlu mengekspor semua skema, inilah skripnya

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
Kerja keras
sumber