Подтвердить что ты не робот

Pg_dump vs pg_dumpall? какой из них использовать для резервного копирования базы данных?

Я пробовал pg_dump, а затем на отдельном компьютере я попытался импортировать sql и заполнить базу данных, я вижу

CREATE TABLE
ERROR:  role "prod" does not exist
CREATE TABLE
ERROR:  role "prod" does not exist
CREATE TABLE
ERROR:  role "prod" does not exist
CREATE TABLE
ERROR:  role "prod" does not exist
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
WARNING:  no privileges could be revoked for "public"
REVOKE
ERROR:  role "postgres" does not exist
ERROR:  role "postgres" does not exist
WARNING:  no privileges were granted for "public"
GRANT

что означает, что мои данные user и roles и grant не находятся в pg_dump

С другой стороны, мы имеем pg_dumpall, я читаю , и это никуда не ведет?

Вопрос
- Кого я должен использовать для резервного копирования баз данных? pg_dump или pg_dumpall?
- Требование состоит в том, что я могу взять резервную копию и иметь возможность импортировать на любую машину, и она должна работать нормально.

4b9b3361

Ответ 1

Обычный процесс:

  • pg_dumpall --globals-only, чтобы получить пользователей/роли/etc
  • pg_dump -Fc для каждой базы данных, чтобы получить хороший сжатый дамп, подходящий для использования с pg_restore.

Да, такой отстой. Мне бы очень хотелось научить pg_dump вставлять pg_dumpall вывод в -Fc дампы, но прямо сейчас, к сожалению, он не знает, как это сделать вам самому.

В момент написания (9.4) также существует неприятное предостережение при таком подходе: ни режим pg_dump, ни pg_dumpall в --globals-only не выдаст доступ пользователя GRANT к DATABASE s.


Вы также должны знать о физических резервных копиях - pg_basebackup, PgBarman и WAL-архивировании, PITR и т.д. Они предлагают гораздо более мелкое зерно восстановления, вплоть до минуты или отдельной транзакции. Недостатком является то, что они занимают больше места, только восстанавливаются в одну и ту же версию PostgreSQL на одной платформе и создают резервные копии всех таблиц во всех базах данных без возможности исключить что-либо.