От известно време ние си работихме с 9.0 и бяхме сравнително доволни от нещата, които предлага, а пък и се държеше достатъчно стабилно. Дойде обаче един момент, в който искахме да използваме някои типове данни като например json & jsonb с подобрените GIN индекси, които бяха новост в 9.4.
В тази статия ще обърна внимание на преминаване към 9.4 като операционната система по подразбиране е CentOS 6. Започваме с инсталиране на свежо копие на PostgreSQL чрез yum:
Инсталиране на хранилището на pgsql 9.4:
rpm -Uvh http://yum.postgresql.org/9.4/redhat/rhel-6-x86_64/pgdg-centos94-9.4-1.noarch.rpm
Инсталиране на pgsql 9.4:
yum install postgresql94-server postgresql94-contrib
След като вече имаме инсталиран PostgreSQL 9.4 преминаваме към създаването на базовата структура:
service postgresql-9.4 initdb
chkconfig postgresql-9.4 on
Имайте предвид, че новия инсталиран PostgreSQL по никакъв начин не нарушава работата на текущото работещо такова, понеже си създава собствена директория, структура и скриптове. Ако промените data директорията с тази която в момента използвате, то най-вероятно ще получите следната грешка:
FATAL: database files are incompatible with server
DETAIL: The data directory was initialized by PostgreSQL version 9.x, which is not compatible with this version 9.4.0.
Тоест новият PostgreSQL се е усетил, че data директорията е за стара версия и е нормално да откаже стартирането. Затова е необходимо да се мигрира структурата до новата версия.
1. Спиране на текущия PostgreSQL. В общия случай това става чрез командата:
/etc/init.d/postgresql-9.x stop
2. Стартиране на същинската миграция:
pg_upgrade \
-d /var/lib/pgsql/9.x \
-D /var/lib/pgsql/9.4 \
-b /usr/pgsql-9.x/bin/ \
-B /usr/pgsql-9.4/bin/
където:
-d – пълния път до data директорията на стария(9.x) сървър
-D – пълния път до data директорията на новия(9.4) сървър
-b – пълния път до binary файловете на стария сървър
-B – пълния път до binary файловете на новия сървър
Ако всичко премине успешно, то ще получите следния резултат:
Upgrade Complete
----------------
Optimizer statistics are not transferred by pg_upgrade so,
once you start the new server, consider running:
analyze_new_cluster.sh
Running this script will delete the old cluster's data files:
delete_old_cluster.sh
Разбира се не е необходимо да стартирате по-горе посочените скриптове като аз лично препоръчвам първия скрипт, понеже той прави прогресивен vacuum на новата база данни. Втория скрипт не е за препоръчване докато не сте сигурни, че всичко работи коректно.
И така вече имаме готовност да стартираме новия сървър с вече мигрираната структура:
/etc/init.d/postgresql-9.4 start
и проверяваме дали наистина всичко е наред:
psql -Upostgres -c "select version()";
version
----------------------------------------------------------------------------------------------------------------
PostgreSQL 9.4.0 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-11), 64-bit
(1 row)
можете да се уверите дали всички бази данни са налице:
psql -Upostgres -l
Това е!
Успех
Живко на 15.12.2014 17:Дек#
Съвсем скоро очакваме излизането на PostgreSQL 9.4.0, така, че статията може да е полезна за тези, които възнамеряват да ъпгрейдват. Ние успяхме да го направим до 9.4rc1. Всичко работи идеално :)