Як я можу скинути всі таблиці до CSV для схеми PostgreSQL?


11

У мене є база даних з великою кількістю схем, і я хочу скинути кожен вміст таблиці в CSV. Я знаю команду COPY, але я не впевнений, як скриптувати щось, що прочитає всі таблиці в схемі та виконати COPY проти них.

Відповіді:


18

Ось сценарій оболонки, який може робити те, що ви хочете:

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

Переконайтеся, що ви встановили змінні DB та SCHEMA для вашої конкретної бази даних та схеми.

Команда обгортання psql використовує прапорці A і t для складання списку таблиць із рядка, переданого команді c.


3

Якщо вам потрібно експортувати всі схеми, ось сценарій

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.