среда, 3 апреля 2013 г.

Дамп базы PostgreSQL

Для создания дампа базы PostgreSQL существует утилита pg_dump.
Самый простой вызов этой утилиты выглядит так:
pg_dump база > файл_дампа

Если нужно задампить только одну таблицу:
pg_dump -t таблица база > файл_дампа

Если нужно указать имя пользователя, хост и порт, то нужно применить соответсвующие опции:

pg_dump -U пользователь -h хост -p порт базы > файл_дампа
или
pg_dump -U пользователь --host=хост --port=порт базы > файл_дампа

Во всех приведенных вариантах вызовов, pg_dump запросит пароль пользователя. Если вы пишите скрипт для автоматического бекапирования, то такое поведение не подходит -- пароль должен передаваться из скрипта. Для этого существует переменная окружения PGPASSWORD.  Следующий вызов не запросит пароль пользователя:
set PGPASSWORD = пароль_пользователя
pg_dump -U пользователь база > файл_дампа

Помимо переменной с паролем поддерживаются следующие переменные окружения:
  • PGDATABASE - база данных;
  • PGHOST - хост;
  • PGPORT - порт;
  • PGUSER - имя пользователя.


Очень полезно при бекапе ставить ключ --inserts, который для вставки данных в таблицы использует INSERT выражения (а не COPY как по умолчанию, которые понимает только pg_dump).

Ключ -c или --clean вставляет DROP выражения перед выражениями CREATE. Удобно если вы разворачиваете дамп в базу в которой уже есть таблицы и вам их нужно заменить.