Добре дошли в сайта на PostgreSQL  България.

Тук може да намерите полезна информация относно любимата СУБД и разбира се да споделите своя опит.

Как да ъпгрейднем PostgreSQL от 9.x до 9.4

 

От известно време ние си работихме с 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

 

 

Това е!

Успех

Коментари
  1. ЖивкоЖивко на 15.12.2014 17:Дек#

    Съвсем скоро очакваме излизането на PostgreSQL 9.4.0, така, че статията може да е полезна за тези, които възнамеряват да ъпгрейдват. Ние успяхме да го направим до 9.4rc1. Всичко работи идеално :)