Como posso despejar todas as tabelas no CSV para um esquema do PostgreSQL?


11

Eu tenho um banco de dados com muitos esquemas e quero despejar cada um dos conteúdos da tabela em CSV. Estou ciente do comando COPY, mas não sei como fazer o script de algo que lerá todas as tabelas em um esquema e executará a COPY contra elas.

Respostas:


18

Aqui está um script de shell que pode fazer o que você deseja:

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

Certifique-se de definir as variáveis ​​DB e SCHEMA para seu banco de dados e esquema específicos.

O comando wrapping psql usa os sinalizadores A e t para fazer uma lista de tabelas da cadeia passada para o comando c.


3

Se você precisar exportar todos os esquemas, aqui está o 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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.