Come posso scaricare tutte le tabelle in CSV per uno schema PostgreSQL?


11

Ho un database con molti schemi e voglio scaricare tutti i contenuti della tabella in CSV. Sono a conoscenza del comando COPIA, ma non sono sicuro di come eseguire lo script di qualcosa che leggerà tutte le tabelle in uno schema ed eseguirà la COPIA su di essi.

Risposte:


18

Ecco uno script di shell che può fare quello che vuoi:

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

Assicurarsi di impostare le variabili DB e SCHEMA sul database e sullo schema specifici.

Il comando wrapping psql utilizza i flag A e t per creare un elenco di tabelle dalla stringa passata al comando c.


3

Se devi esportare tutti gli schemi, ecco lo script

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.