3 июн. 2015 г.

Postgresql issue during Debian Wheezy to Jessie upgrade

Проблема, собственно, в чем: при обычном dist-upgrade сабжевая СУБД нормально обновилась с 9.1 до 9.4 (минорные циферки опустим, неважно). Однако сам процесс обновления оказался забавным: инсталлятор снес 9.1 (оставив конфиги в /etc/ и базы в /var/lib), установил 9.4, создал дефолтный кластер, запустил всю эту балалайку - и доволен. 
Таким образом, в итоге имеем корректно функционирующий постгрес, но с умолчальным конфигом и без баз =).
Вообще, у postgresl имеется встроенный механизм обновления - pg_upgrade, который сам проверяет совместимость баз в старом и новом релизах и перебрасывает их из папки в папку (полагаю, что и вносит при этом необходимые изменения). Но дебиановские мейнтейнеры как-то этот момент похоже упустили. 
А делать надо следующее (актуализированные команды, чтобы не переписывать, взяты отсюда, а документация по этому вопросу - тут):
sudo -H -u postgres /usr/lib/postgresql/9.4/bin/pg_upgrade \
-b /usr/lib/postgresql/9.1/bin \
-B /usr/lib/postgresql/9.4/bin \
-d /var/lib/postgresql/9.1/main \
-D /var/lib/postgresql/9.4/main \
-o ' -c config_file=/etc/postgresql/9.1/main/postgresql.conf' \
-O ' -c config_file=/etc/postgresql/9.4/main/postgresql.conf'
Конечно, писать все можно и в одну строчку, забыв про "\". Строчные буквы относятся к файлам старой версии, прописные - к новой. 
В моем случае беда была в том, что при обновлении все бинарные файлы старого релиза оказались удалены, а в репозиториях jessie версии 9.1 уже нет. Поэтому пришлось искать старый .deb (благо кэш apt-а никто не чистил), и подсовывать файлики оттуда (установить deb-пакеты - плохая идея, ибо он начнет делать downgrade текущей инсталляции).
При первом запуске рекомендую добавить еще опцию --check,  чтобы без внесения каких-либо изменений провести проверку всего и вся. В случае ошибок инфомация записывается в лог-файл, создаваемый в текущей рабочей директории.