У меня установлен PostgreSQL 9.2 на экземпляре EC2, с yum install
. Теперь мне нужно перейти на PostgreSQL 9.4. Я заметил это yum list
перечисляет 9.2, 9.3 и 9.4 как полностью отдельные пакеты, поэтому я не могу просто выполнить обновление с помощью функции обновления yum.
У меня есть база данных, которая должна пережить обновление. Кроме того, у меня есть некоторая конфигурация, настроенная в /var/lib/pgsql9/data
(сертификат сервера / ключ в .crt
/.key
файлы, изменения в pg_hba.conf
, изменения к postgresql.conf
), который также должен выжить.
Я видел этот вопрос но информация там не имеет отношения к сценарию пакета yum (и кажется устаревшей), и, кроме того, конкретно не касается проблем конфигурации.
Каков правильный / рекомендуемый способ выполнить обновление, сохранив при этом мои настройки конфигурации и гарантируя, что база данных будет работать после обновления?
Я нашел способ сделать это, но не уверен, что это правильный / рекомендуемый способ. Мои шаги ниже:
1. Сохраните существующую конфигурацию.
Бегать sudo vim /var/lib/pgsql9/data/postgresql.conf
и sudo vim /var/lib/pgsql9/data/pg_hba.conf
и скопируйте куда-нибудь все раскомментированные настройки. Позже вам придется вручную установить их в новой версии PostgreSQL.
2. Установите новую версию PostgreSQL.
Использовать yum list
чтобы найти правильные имена пакетов и установить их. В моем случае мне нужно было sudo yum install postgresql94.x86_64
и sudo yum install postgresql94-server.x86_64
Бегать postgres --version
, pg_dumpall --version
и psql --version
чтобы убедиться, что версия была обновлена до новой.
3. Сохраните существующие данные и закройте базу данных.
Остановите все процессы, которые могут изменить базу данных (например, ваше веб-приложение). Бегать sudo pg_dumpall >db.out
, с последующим sudo service postgresql stop
сразу после этого, чтобы остановить сервер и предотвратить дальнейшее изменение данных. Изучите полученный дамп данных с помощью vim db.out
- он должен иметь всю вашу схему БД и данные в простом формате SQL. Вы можете сделать резервную копию этого файла, прежде чем продолжить.
4. Сохраните старый каталог базы данных.
sudo mv /var/lib/pgsql9 /var/lib/pgsql9.old
5. Создайте новый каталог базы данных для новой версии PostgreSQL.
sudo mkdir /var/lib/pgsql9
sudo chown postgres /var/lib/pgsql9
sudo su postgres
в sudo su
Подсказка: initdb -D /var/lib/pgsql9/data
Затем нажмите Ctrl-D
6. Скопируйте сертификаты в новый каталог базы данных.
Если вы используете сертификаты, скопируйте их в новый каталог и предоставьте им права собственности, например:
sudo cp /var/lib/pgsql9.old/data/server.key /var/lib/pgsql9/data
sudo cp /var/lib/pgsql9.old/data/server.crt /var/lib/pgsql9/data
sudo chown postgres /var/lib/pgsql9/data/server.crt
sudo chown postgres /var/lib/pgsql9/data/server.key
7. Настройте новую базу данных.
Использовать sudo vim /var/lib/pgsql9/data/postgresql.conf
и sudo vim /var/lib/pgsql9/data/pg_hba.conf
чтобы настроить базу данных в соответствии с настройками, которые вы сохранили на шаге 1.
8. Исправьте сервис postgresql, чтобы он указывал на новую версию.
Бегать ls -ila /etc/rc.d/init.d
- обратите внимание, что у вас есть скрипт для каждой версии (postgresql92
, postgresql94
), но postgresql
сам связан со старой версией. Исправьте это, запустив sudo ln -sf /etc/rc.d/init.d/postgresql94 /etc/rc.d/init.d/postgresql
и запустить ls
команду еще раз, чтобы проверить правильность ссылки.
9. Запустите службу.
Бегать sudo service postgresql start
. Если служба не запускается, скорее всего, это ошибка разрешений (вы забыли chown
шаг выше) или синтаксическая ошибка конфигурации. Можно посмотреть логи (/var/lib/pgsql94/pgstartup.log
и файлы в /var/lib/pgsql9/data/pg_log
) искать ошибку. Если служба запустилась правильно, можно запустить sudo su postgres
, затем psql
чтобы убедиться, что ваша база данных работает (используйте \q
для выхода и нажмите Ctrl-D, чтобы выйти sudo su
).
10. Восстановите свои старые данные.
sudo cp db.out /var/lib/pgsql9/data
sudo chown postgres /var/lib/pgsql9/data/db.out
sudo su postgres
И в этой подсказке:
psql -d postgres -f /var/lib/pgsql9/data/db.out
Вы должны увидеть несколько прокручиваемых команд базы данных. На этом этапе ваша база данных обновлена и работает. Вы можете проверить, запустив psql
. Использовать \list
команда для просмотра списка баз данных, \connect (database_name)
для подключения к вашей базе данных, \dt
для просмотра списка подключенных таблиц или выполнения команд SQL, завершающихся точкой с запятой. Тип \q
бросить курить.
По завершении проверки нажмите Ctrl-D
выйти sudo su
.
11. Очистить
На этом этапе, когда вы убедитесь, что все работает, вы можете удалить /var/lib/pgsql9.old
, /var/lib/pgsql9/db.out
, db.out
и любые другие резервные копии.