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.
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.
Antworten:
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.
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