Wie kann ich alle Tabellen für ein PostgreSQL-Schema in CSV sichern?

10

Ich habe eine Datenbank mit vielen Schemas und möchte jeden Tabelleninhalt in CSV sichern. Ich kenne den Befehl COPY, bin mir aber nicht sicher, wie ich ein Skript erstellen soll, das alle Tabellen in einem Schema liest und COPY für sie ausführt.

Robertpostill
quelle

Antworten:

17

Hier ist ein Shell-Skript, das tun kann, was Sie wollen:

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

Stellen Sie sicher, dass Sie die DB- und SCHEMA-Variablen auf Ihre bestimmte Datenbank und Ihr Schema festlegen.

Der Befehl wrapping psql verwendet die Flags A und t, um eine Liste von Tabellen aus der an den Befehl c übergebenen Zeichenfolge zu erstellen.

Ziggy Crueltyfree Zeitgeister
quelle
3

Wenn Sie alle Schemas exportieren müssen, finden Sie hier das Skript

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
Toilette
quelle