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

»»»

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

Задача переноса базы данных относительно PostgreSQL не простая операция. Прямое копирование файлов и директорий здесь не применимо.

 

 

Базы данных MySQL можно перенести простым копированием файлов базы. В каталоге, где они хранятся, название подкаталогов — это имена баз, а каждая таблица состоит из 2-3 файлов, с именем как у самой таблицы. Прямое копирование сработает, если основные версии серверов совпадают.

В случае postgresql подобный фокус не работает. Подсмотреть папку с базами данных в конфигурации 

ps auxw | grep postgres | grep -- -D

Названия таблиц и баз в явном виде отсутствует. Копирование файлов будет бесполезно.

Главный админ

Операции с 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, --сreate — добавляет команду для создания БД, я покажу как создать её вручную.
-c — добавляет команды для удаления (drop) объектов (таблиц, видов и т.д.).

Есть и более мощная команда, которая выгружает сразу все базы:

pg_dumpall | gzip -c > allDB-filedump.gz

Справку по ключам можно посмотреть так:

pg_dump --help
pg_dumpall --help

 

Создание новой базы из консоли PostpreSQL

Получив дамп базы, его необходимо импортировать на новом сервере. Если в полученном дампе не было указано создание базы, то необходимо предварительно создать на новом сервере базу (если она не была создана ранее).

Переходим в консоль postgresql:

psql

В консоли вводим SQL команду на создание базы данных. Для выхода из консоли можно нажать CTRL+D или использовать команду q.

В конце команд консоли обязательно должна присутствовать "точка с запятой"  - без неё команда не будет выполнена. В случае успешного выполнения, в консоли будет отклик сервера — «CREATE DATABASE».

 

Заливка дампа базы postgresql

Распаковываем файл дампа из архива gz:

gunzip myDB-filedump.gz

 

Импортируем дамп в базу.

psql -d myNewBase -f myDB-filedump

База данных myNewBase будет заполнена из файла myDB-filedump.

Рейтинг

В этом разделе