PostgreSQL: разница между pg_dump + psql и созданием шаблона? - PullRequest
3 голосов
/ 03 ноября 2011

Я знаю, что есть два способа сделать копию базы данных.

Один из них - экспортировать базу данных в виде гигантского файла SQL, а затем загрузить ее как отдельную базу данных:

pg_dump <database> | psql <new database>

Другой способ - передать имя базы данных в качестве шаблона аргументу создания базы данных:

createdb -T <database> <new database>

В чем разница между этими двумя методами, если таковые имеются? Есть ли какие-либо преимущества использования одного над другим, например, производительность?

Ответы [ 2 ]

4 голосов
/ 04 ноября 2011

Использование CREATE DATABASE / createdb с шаблоном создает копию каталога, тогда как pg_dump + psql должен сериализовать и десериализовать всю базу данных, отправлять их в оба конца клиенту и должен запустить все через транзакцию и механизм записи с опережением записи. Таким образом, первый метод должен быть намного быстрее.

Недостатком является то, что CREATE DATABASE блокирует базу данных шаблонов во время ее копирования. Поэтому, если вы хотите создать копии действующей базы данных, это не сработает. Но если вы хотите быстро сделать копии неактивной / шаблонной базы данных, то использование CREATE DATABASE, вероятно, является правильным решением.

2 голосов
/ 03 ноября 2011

В соответствии с текущими документами

Хотя можно скопировать базу данных, отличную от template1, указав ее имя в качестве шаблона, это (пока) не предназначено дляуниверсальное средство "КОПИРОВАНИЕ БАЗЫ ДАННЫХ".Основным ограничением является то, что никакие другие сеансы не могут быть подключены к базе данных шаблонов во время ее копирования.CREATE DATABASE потерпит неудачу, если при запуске будет какое-либо другое соединение;в противном случае новые подключения к базе данных шаблонов блокируются до завершения CREATE DATABASE.

Помимо этого легкого предупреждения, которое восходит как минимум к версии 8.2, вы можете вносить определенные изменения с помощью createb- такие вещи, как изменение параметров сортировки, кодировки и т. д. (в определенных пределах).

Лично мне было бы трудно оправдать использование madeb, который использует полную блокировку базы данных, для копирования рабочей базы данных.

Я думаю, что другое основное отличие состоит в том, что «dump and load» - полностью поддерживаемый способ копирования базы данных.Кроме того, при необходимости вы можете перенести копию дампа на изолированный компьютер для тестирования.(Утилита createb должна иметь доступ как к исходному, так и к целевому объектам одновременно.) Но я не использовал madeb для создания копий, поэтому я могу ошибаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...