Comment puis-je vider toutes les tables vers CSV pour un schéma PostgreSQL?

10

J'ai une base de données avec beaucoup de schémas et je veux vider le contenu de chaque table au format CSV. Je connais la commande COPY mais je ne sais pas comment écrire quelque chose qui lira toutes les tables dans un schéma et exécutera la copie contre elles.

robertpostill
la source

Réponses:

17

Voici un script shell qui peut faire ce que vous voulez:

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

Assurez-vous de définir les variables DB et SCHEMA sur votre base de données et votre schéma particuliers.

La commande wrapping psql utilise les indicateurs A et t pour créer une liste de tables à partir de la chaîne transmise à la commande c.

Ziggy Crueltyfree Zeitgeister
la source
3

Si vous devez exporter tous les schémas, voici le 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
Toilal
la source