Отображение валюты на сайте:

    Обязательно перед всеми проводимыми работами необходимо сделать копию всех баз данных сервера.
    Пример изменения версии с PostgreSQL 9.2 до PostgreSQL 9.3 на Centos 7 и на Debian 8 пример изменения версии с 9.4 до 9.5

    Centos 7 PostgreSQL 9.3

    Устанавливаем репозиторий. Репозиторий с необходимой версией вы можете найти на http://yum.postgresql.org

    wget https://download.postgresql.org/pub/repos/yum/9.3/redhat/rhel-7-x86_64/pgdg-centos93-9.3-3.noarch.rpm  
    rpm -ivh ./pgdg-centos93-9.3-3.noarch.rpm  
    

    Смотрим, какие пакеты postgresql установлены:

    rpm -qa | grep postgresql  
    postgresql-server-9.2.15-1.el7_2.x86_64  
    postgresql-libs-9.2.15-1.el7_2.x86_64  
    postgresql-9.2.15-1.el7_2.x86_64  
    

    Устанавливаем такие же пакеты версии 9.3 и пакет contrib

    yum install postgresql93-server.x86_64 postgresql93-libs.x86_64 postgresql93.x86_64 postgresql93-contrib.x86_64  
    

    В файле /usr/lib/systemd/system/postgresql-9.3.service указываем порт, отличный от стандартного, например PGPORT=5432 Проверьте, что PGDATA отличается от /var/lib/pgsql/data/, например PGDATA=/var/lib/pgsql/9.3/data/ Инициализируем 9.3 Postgresql

    /usr/pgsql-9.3/bin/postgresql93-setup initdb
    

    Проверяем, что директория /var/lib/pgsql/9.3/data/ и файлы в ней созданы. Останавливаем сервер postgresql

    service postgresql stop  
    

    Необходимо запустить утилиту pg_upgrade. Опции утилиты:

    • -b бинарная директория старой версии postgresql
    • -B бинарная директория новой версии postgresql
    • -d директория с данными старой версии postgresql
    • -D директория с данными новой версии postgresql

    Запускаем pg_upgrade

    su postgres  
    cd /var/lib/pgsql/9.3/  
    /usr/pgsql-9.3/bin/pg_upgrade -v -b /usr/bin/ -B /usr/pgsql-9.3/bin/ -d /var/lib/pgsql/data/ -D /var/lib/pgsql/9.3/data/
    

    Возможные проблемы:

    *failure*
    There were problems executing ""/usr/bin/pg_ctl" -w -l "pg_upgrade_server.log" -D "/var/lib/pgsql/data/" -o "-p 50432 -b  
    -c listen_addresses= - c unix_socket_permissions=0700 -c unix_socket_directory='/var/lib/pgsql/9.3/data'" start >> "pg_upgrade_server.log" 2>&1"
    Consult the last few lines of "pg_upgrade_server.log" for  
    the probable cause of the failure.  
    

    В логе pg_upgrade_server.log при этом следующие ошибки:

    command: "/usr/bin/pg_ctl" -w -l "pg_upgrade_server.log" -D "/var/lib/pgsql/data/" -o "-p 50432 -b  -c listen_addresses= -c  
    unix_socket_permissions=0700 -c unix_socket_directory='/var/lib/pgsql/9.3/data'" start >> "pg_upgrade_server.log" 2>&1  
    waiting for server to start....FATAL:  unrecognized configuration parameter "unix_socket_directory"  
    stopped waiting  
    pg_ctl: could not start server  
    Examine the log output.  
    

    Под пользователем root выполняем следующие команды:

    mv /usr/bin/pg_ctl{,-orig}  
    echo '#!/bin/bash' > /usr/bin/pg_ctl  
    echo '"$0"-orig "${@/unix_socket_directory/unix_socket_directories}"' >> /usr/bin/pg_ctl  
    chmod +x /usr/bin/pg_ctl  
    
    connection to database failed: FATAL:  no pg_hba.conf entry for host "[local]", user "postgres", database "template1", SSL off  
    

    Для решения проблемы необходимо добавить в /var/lib/pgsql/data/pg_hba.conf строку:

    local   all         all                               trust  
    

    Сравниваем конфигурационный файл старого сервера с новым.

    diff /var/lib/pgsql/data/pg_hba.conf ./pg_hba.conf  
    

    Если необходимо, копируем конфигурационный файл pg_hba.conf

    cp /var/lib/pgsql/data/pg_hba.conf ./pg_hba.conf  
    

    Меняем порт на порт по умолчанию в /usr/lib/systemd/system/postgresql-9.3.service PGPORT=5432 Запускаем новый сервер

    service postgresql-9.3 start  
    

    Запускаем analyze_new_cluster.sh

    su postgres  
    /var/lib/pgsql/9.3/analyze_new_cluster.sh
    

    Запускаем, delete_old_cluster.sh, чтобы удалить директорию старого сервера. Все базы данных будут удалены

    /var/lib/pgsql/9.3/delete_old_cluster.sh
    

    Копируем содержимое новой директории в рабочую директорию сервера.

    cp -R /var/lib/pgsql/9.3/data /var/lib/pgsql/  
    chown -R postgres:postgres /var/lib/pgsql/data  
    

    в /usr/lib/systemd/system/postgresql-9.3.service меняем PGDATA на /var/lib/pgsql/data/ Перезапускаем

    service postgresql-9.3 restart  
    

    Удаляем старый сервер

    yum remove postgresql-server-9.2.15-1.el7_2.x86_64 postgresql-9.2.15-1.el7_2.x86_64 postgresql-libs-9.2.15-1.el7_2.x86_64  
    

    Запускаем скрипт со следующим содержимым:

    ls /usr/pgsql-9.3/bin/  |while read line  
    do  
    ln -s /usr/pgsql-9.3/bin/$line /usr/bin/$line  
    done  
    

    В файле /var/lib/pgsql/.bash_profile меняем версию на 9.3 После проведенных работ следует загрузить существующую резервную копию БД и проверить работоспособность сервера.

    Debian 8 PostgreSQL 9.5

    Подключаем репозиторий с другими версиями postgresql В файл /etc/apt/sources.list добавляем строки

    # PostgreSQL repository
    deb http://apt.postgresql.org/pub/repos/apt/ jessie-pgdg main  
    

    Импортируем ключ для репозитория

    wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -  
    

    Обновим пакеты:

    apt-get update -y  
    

    Проверяем наличие версий PostgreSQL

    apt-cache search postgresql- | less  
    

    Устанавливаем версию 9.5 PostgreSQL

    apt-get install postgresql-9.5 -y  
    

    Удаляем новую версию кластера:

    pg_dropcluster --stop 9.5 main  
    

    С помощью скрипта pg_upgradecluster производим апгрейд до новой мажорной версии, конфигурационные файлы и данные будут скопированы в новый кластер.

    pg_upgradecluster -v 9.5 9.4 main  
    

    При апгрейде возможны проблемы:

    psql: FATAL:  no pg_hba.conf entry for host "[local]", user "postgres", database "template1", SSL off  
    psql: FATAL:  no pg_hba.conf entry for host "[local]", user "postgres", database "template1", SSL off  
    Use of uninitialized value $out in pattern match (m//) at /usr/share/perl5/PgCommon.pm line 915.  
    psql: FATAL:  no pg_hba.conf entry for host "[local]", user "postgres", database "template1", SSL off  
    Use of uninitialized value $out in pattern match (m//) at /usr/share/perl5/PgCommon.pm line 921.  
    Use of uninitialized value $ctype in scalar chomp at /usr/share/perl5/PgCommon.pm line 924.  
    Use of uninitialized value $collate in scalar chomp at /usr/share/perl5/PgCommon.pm line 925.  
    Error: could not get cluster locales  
    

    Следует добавить в /etc/postgresql/9.4/main/pg_hba.conf строку

    local   all         all                               trust  
    

    После апгрейда удаляем эту строку из /etc/postgresql/9.5/main/pg_hba.conf Удаляем старый сервер, все базы данных будут удалены:

    pg_dropcluster --stop  9.4 main  
    

    После проведенных работ следует проверить работоспособность сервера, в случае отсутствия БД загрузить резервную копию.

    С подробной информацией можно ознакомится на официальном сайте разработчика.