Upgrade de PostgreSQL 9.3 para 9.6 (em CentOS 7)

Este procedimento foi feito via backup / restore (e não via pg_upgrade). O passo a passo é:
– Backup dos dados;
– Instalar a versão nova, sem remover a versão anterior;
– Parar e desabilitar a versão anterior;
– Habilitar e iniciar a versão nova;
– Restaurar os dados na versão nova.

Devem ser copiados também o arquivo de formas de conexão (pg_hba.conf) e parâmetros para o diretório da nova versão (postgresql.conf).

[root@localhost ~]# su - postgres
Last login: Mon Mar  6 15:36:54 BRT 2017 on pts/0
-bash-4.2$ pg_dumpall > backup.sql
-bash-4.2$ exit
logout
[root@localhost ~]# yum -y install https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm

...
Installed:
  pgdg-centos96.noarch 0:9.6-3

Complete!
[root@localhost ~]# systemctl stop postgresql-9.3
[root@localhost ~]# yum -y install postgresql96 postgresql96-devel postgresql96-contrib postgresql96-libs postgresql96-test postgresql96-server postgresql96-docs
...
Installed:
  postgresql96.x86_64 0:9.6.2-2PGDG.rhel7               postgresql96-contrib.x86_64 0:9.6.2-2PGDG.rhel7          postgresql96-devel.x86_64 0:9.6.2-2PGDG.rhel7
  postgresql96-docs.x86_64 0:9.6.2-2PGDG.rhel7          postgresql96-libs.x86_64 0:9.6.2-2PGDG.rhel7             postgresql96-server.x86_64 0:9.6.2-2PGDG.rhel7
  postgresql96-test.x86_64 0:9.6.2-2PGDG.rhel7

Complete!
[root@localhost ~]# /usr/pgsql-9.6/bin/postgresql96-setup initdb
Initializing database ... OK

[root@localhost ~]# systemctl enable postgresql-9.6
Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-9.6.service to /usr/lib/systemd/system/postgresql-9.6.service.
[root@localhost ~]# systemctl disable postgresql-9.3
Removed symlink /etc/systemd/system/multi-user.target.wants/postgresql-9.3.service.
[root@localhost ~]# systemctl start postgresql-9.6
[root@localhost ~]# su - postgres
Last login: Mon Mar  6 15:43:54 BRT 2017 on pts/0
-bash-4.2$ psql
psql (9.6.2)
Type "help" for help.

postgres-# \q
-bash-4.2$ psql < backup.sql
SET
SET
SET
ERROR:  role "postgres" already exists
ALTER ROLE
REVOKE
REVOKE
GRANT
GRANT
You are now connected to database "postgres" as user "postgres".
SET
SET
SET
SET
SET
SET
SET
COMMENT
CREATE EXTENSION
COMMENT
REVOKE
REVOKE
GRANT
GRANT
You are now connected to database "template1" as user "postgres".
SET
SET
SET
SET
SET
SET
SET
COMMENT
CREATE EXTENSION
COMMENT
REVOKE
REVOKE
GRANT
GRANT
-bash-4.2$

5 comments

  1. Para bases bem pequenas é OK utilizar o pg_dumpall. Mas para bases maiores…

    Um detalhe importante no processo. Utilizar o pg_dumpall da versão mais nova, sempre. Então seria bom instalar os binários da versão mais nova antes de gerar o dump.

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.