Для переноса базы Redmine с MySQL на PostgreSQL необходимо выполнить несколько простых действий.
Но условимся для начала, что у нас есть установленный и работающий redmine (правда, статья там об установке на postgres), базу которого с MySQL нужно перенести на PostgreSQL. А это значит, что необходимо настроить и установить некоторые нужные пакеты приложений.
Сам процесс перехода таков:
Устанавливаем пакеты
sudo apt install postgresql postgresql-contrib \
postgresql-server-dev-10 python-pip python-dev -y
Создаём базу
Заходим под пользователем postgres
sudo su - postgres
psql
CREATE ROLE redmine LOGIN ENCRYPTED PASSWORD 'very_strong_pass' NOINHERIT VALID UNTIL 'infinity'; CREATE DATABASE redmine WITH ENCODING='UTF8' OWNER=redmine;
Задаём пароль к базе
\password postgres
И выходим
/q
И выходим из под пользователя postgres
Редактируем конфигурационный файл redmine, для включения поддержки новой БД
cd /path/to/redmine/dir/
nano config/database.yml
После настроек mysql-адаптера вставляем строки для postgres-адаптера
Например:
production: adapter: mysql2 database: redmine host: localhost username: root password: very_strong_pass encoding: utf8 socket: /var/run/mysqld/mysqld.sock production: adapter: postgresql database: redmine host: localhost username: postgres password: very-strong_pass
Сохраняемся.
Включаем поддержку новой базы
bundle install --without development test
Ставим пакет py-mysql2pgsql для переноса базы
sudo pip install py-mysql2pgsql
Запускаем утилиту для создания конфигурационного файла.
py-mysql2pgsql
Редактируем только что созданный файл
nano mysql2pgsql.yml
mysql: hostname: localhost port: 3306 socket: /var/run/mysqld/mysqld.sock username: root password: very_strong_pass database: redmine compress: false destination: # if file is given, output goes to file, else postgres file: postgres: hostname: localhost port: 5432 username: redmine password: very_strong_pass database: redmine
Сохраняемся и запускаем конвертацию
py-mysql2pgsql -v -f mysql2pgsql.yml
Теперь можно закомментировать старый mysql-адаптер в файле конфигурации
И перезапустить сервер приложений. В моём случае — перезапустить nginx