Нещодавно зіткнувся з проблемою перенесення даних в postgresql, як виявилося, зробити дамп і потім завантаження даних в PostgreSQL дещо складніше, ніж в MySQL. Розглянемо як це зробити за допомогою двох команд - pg_dump і pg_restore.
Для початку робимо дамп з сервера, звідки переносимо дані:
Це створить повний дамп бази dbname з BLOB'амі і без owner'а, в спеціальному форматі для pg_restore.
Далі, створюємо базу даних на сервері, де будемо робити завантаження даних:
Прапори в даному випадку означають наступне:
- Зупинитися в разі помилки.
- Чи не виконувати відновлення прав (в моєму випадку на двох різних серверах просто були різні користувачі БД, що також викликало помилку імпорту).
- Виконати все в одній транзакції (якщо раптом виникне помилка - буде простіше почати з нуля).
Далі, оскільки користувачі на двох різних серверах розрізнялися і відновлення дампа відбувалося без відновлення користувача, необхідно проставити права для користувача test (виставляються права на таблиці, послідовності та подання aka views). У моєму випадку команди виконувалися від користувача pgsql:
Не забудьте змінити всюди dbname на відповідні імена баз і, звичайно, поміняти де необхідно ім'я користувача і т.п.
P.S. Можливо, останні 3 команди можна замінити внутрішніми засобами PostgreSQL, але для мене такий варіант прийнятний.
Перераховані вище команди для перепризначення прав можна загорнути в shell-скрипт. Наприклад, в такий:
Перший параметр скрипта - ім'я БД, 2й - ім'я користувача, на якого необхідно призначити права.