Как я могу сбросить все таблицы в 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 для вашей конкретной базы данных и схемы.

Команда wrapping 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.