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

Не простая операция,  если вы не имели опыта настройки / работы с postgresql до сих пор. Расскажу поэтапно как выгрузить дамп базы, и как затем этот дамп загрузить в нужном месте :).

Фокусы, которые тут не работают

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

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

В примере папка с базами: -D /var/lib/postgresql/9.3/main

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

Самый главный админ

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

Переходим под эту учетку.

Посмотреть список баз данных

Чтобы узнать какие базы у вас есть в наличии можно использовать команду:

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

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

Получение дампа базы postgresql

Для создания дампа базы служит команда pg_dump. Мы направим её вывод в файл через gzip.

Здесь:

myDBname — это название базы данных, а myDB-filedump.gz — название файла, куда будет сохранен дамп.

Расшифровка ключей:

-h [host] : явное указание хоста, значение по умолчанию localhost или значение из переменной окружения PGHOST.

: пропускает команды для установки владельца таблиц, видов и т.д.

-F {c|t|p} — формат вывода данных custom, tar, plane text.

-U [username] — пользователь, чьими правами доступа нужно воспользоваться при запросе данных. По умолчанию берется текущий пользователь. При необходимости программа запросит пароль.

-C, —create — добавляет команду для создания БД, я покажу как создать её вручную.

-c — добавляет команды для удаления (drop) объектов (таблиц, видов и т.д.).

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

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

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

Получив дамп базы, развернем его на новом месте. Если вы не «зашили» в дамп создание базы, то вам нужно будет предварительно её создать (если она не была создана ранее).

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

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

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

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

Для начала распакуем файл из обертки gz:

Теперь все готово для импорта данных.

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

Мало букафф? Читайте есчо !

Лечим 403-ю Forbidden - доступ запрещен

Январь 23, 2017 г.

В данном случае от "404 ошибки - файл не найден" нас отделяет целая пропасть. Файл найден, но сервер его не спешит отдавать пользователю, т.к. считает, что у пользователя не достаточно на это прав. Если сервер предотвратил несанкционированный доступ ...

Читать

Установка C++ для unix (debian)

Декабрь 19, 2015 г.

Мне пришла мысль кое что "по-кодить" для веб-сервера, начал вспоминать когда то горячо любимый C++. Но сразу столкнулся с тем фактом, что в современной UNIX не установлен компилятор С++ по умолчанию. Устанавливаем Итак, устанавливаем Си на хостинге ...

Читать

 

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий:

Много комментариев в “Перенос базы PostgreSQL с сервера на сервер”

  1. Миша:

    В какой директории искать дамп?

    • Он будет создан там, где вы выполняли команду создания файла дампа. Можете также указать абсолютный путь, чтобы дамп создался где то в ином месте.

      • Миша:

        Вот спасибо)) А я от пользователя postgres пытался делать. Всё получилось)