Перенос базы PostgreSQL с сервера на сервер

baltun

Администратор
Сообщения
11.479
Реакции
2.749
Баллы
1.833
Не простая операция, если вы не имели опыта настройки / работы с postgresql до сих пор. Расскажу поэтапно как выгрузить дамп базы, и как затем этот дамп загрузить в нужном месте.

Базы mySQL я иногда экспортирую не с помощью скрипта, а копирую файлы данных. В каталоге, где они хранятся, название подкаталогов — это имена баз, а каждая таблица состоит из 2-3 файлов, с именем как у самой таблицы. Копирование сработает, если основные версии серверов совпадает. В случае postgresql подобный фокус не работает. Вы можете подсмотреть папку с базами данных в конфигурации, вам поможет вот такая команда:
Код:
ps auxw | grep postgres | grep -- -D

postgres 23395 0.0 0.7 247736 16164 ? S 17:33 0:00
/usr/lib/postgresql/9.3/bin/postgres -D /var/lib/postgresql/9.3/main -c
config_file=/etc/postgresql/9.3/main/postgresql.conf

В примере папка с базами: -D /var/lib/postgresql/9.3/main. Названия таблиц и баз вы здесь не увидите в явном виде. Копирование файлов будет бесполезно.

Самый главный админ
Первое, что надо усвоить — операции с postgresql удобно выполнять с правами postgresql же суперадмина. На юзера root PSQL чихал и не признает его авторитета. По умолчанию, супер-юзер имеет имя postgres.
Переходим под эту учетку.
Код:
su - postgres

Посмотреть список баз данных
Чтобы узнать какие базы у вас есть в наличии можно использовать команду:
Код:
psql -l

В консоль будет выведен список баз данных, информация о владельце каждой базы, привилегиях. Если вы и так знаете название базы данных, и вас есть реквизиты доступа к ней (взятые, к примеру, в настройках подключения вашего сайта или программы), то знакомство со списком баз можно пропустить.

Получение дампа базы postgresql
Для создания дампа базы служит команда pg_dump. Мы направим её вывод в файл через gzip.
Код:
pg_dump -h localhost -O -F t -c -U postgres myDBname | gzip -c > myDB-filedump.gz

Здесь:
myDBname — это название базы данных, а myDB-filedump.gz — название файла, куда будет сохранен дамп.
Расшифровка ключей:
-h [host] : явное указание хоста, значение по умолчанию localhost или значение из переменной окружения PGHOST.
: пропускает команды для установки владельца таблиц, видов и т.д.
-F {c|t|p} — формат вывода данных custom, tar, plane text.
-U [username] — пользователь, чьими правами доступа нужно воспользоваться при запросе данных. По умолчанию берется текущий пользователь. При необходимости программа запросит пароль.
-C, —create — добавляет команду для создания БД, я покажу как создать её вручную.
-c — добавляет команды для удаления (drop) объектов (таблиц, видов и т.д.).
Есть и более мощная команда, которая выгружает сразу все базы:
Код:
pg_dumpall | gzip -c > allDB-filedump.gz

Справку по ключам можно посмотреть так:
Код:
pg_dump --help
pg_dumpall --help

Создание новой базы из консоли PostpreSQL
Получив дамп базы, развернем его на новом месте. Если вы не «зашили» в дамп создание базы, то вам нужно будет предварительно её создать (если она не была создана ранее). Переходим в консоль postgresql:
Код:
psql

В консоли введите SQL команду на создание базы данных. Как видите, я авторизован как супер-юзер PSQL. Для выхода из консоли можно нажать CTRL+D.
create-database.png

Не забывайте про «точку с запятой» в конце команды — без неё команда не будет выполнена. В случае успеха, вы увидите в консоли отклик сервера — «CREATE DATABASE».

Заливка дампа базы postgresql
Для начала распакуем файл из обертки gz:
Код:
gunzip myDB-filedump.gz

Теперь все готово для импорта данных.
Код:
psql -d myNewBase -f myDB-filedump

Так база данных myNewBase будет заполнена из файла myDB-filedump.
 
Назад
Верх Низ