Postgresql як перенести дані з однієї бд в іншу

Нещодавно зіткнувся з проблемою перенесення даних в postgresql, як виявилося, зробити дамп і потім завантаження даних в PostgreSQL дещо складніше, ніж в MySQL. Розглянемо як це зробити за допомогою двох команд - pg_dump і pg_restore.

Для початку робимо дамп з сервера, звідки переносимо дані:

Це створить повний дамп бази dbname з BLOB'амі і без owner'а, в спеціальному форматі для pg_restore.

Далі, створюємо базу даних на сервері, де будемо робити завантаження даних:

Прапори в даному випадку означають наступне:

  • Зупинитися в разі помилки.
  • Чи не виконувати відновлення прав (в моєму випадку на двох різних серверах просто були різні користувачі БД, що також викликало помилку імпорту).
  • Виконати все в одній транзакції (якщо раптом виникне помилка - буде простіше почати з нуля).

Далі, оскільки користувачі на двох різних серверах розрізнялися і відновлення дампа відбувалося без відновлення користувача, необхідно проставити права для користувача test (виставляються права на таблиці, послідовності та подання aka views). У моєму випадку команди виконувалися від користувача pgsql:

Не забудьте змінити всюди dbname на відповідні імена баз і, звичайно, поміняти де необхідно ім'я користувача і т.п.

P.S. Можливо, останні 3 команди можна замінити внутрішніми засобами PostgreSQL, але для мене такий варіант прийнятний.

Перераховані вище команди для перепризначення прав можна загорнути в shell-скрипт. Наприклад, в такий:

Перший параметр скрипта - ім'я БД, 2й - ім'я користувача, на якого необхідно призначити права.

Схожі статті