Atualização PostgreSQL 9.5 > 12

Este procedimento trata-se de atualização do sistema gerenciador de banco de dados (SGBD) PostgreSQL, repositório do MD2 QualityManager, da versão 9.5 para versão 12. Atente-se aos requisitos e alertas deste tópico antes de iniciar a atualização.

Atualização PostgreSQL 9.5 para 12

Preparação

Este procedimento trata-se de atualização do sistema gerenciador de banco de dados (SGBD) PostgreSQL, repositório do MD2 QualityManager, da versão 9.5 para versão 12. Atente-se aos requisitos e alertas deste tópico antes de iniciar a atualização.

Ao final do procedimento a aplicação MD2 QualityManager executará apontando para a nova versão de banco de dados de forma transparente.

Atualização

Para garantir que não há nenhuma conexão no banco de dados, desligue o Tomcat e reinicie o PostgreSQL:

$ sudo systemctl stop tomcat9.service
$ sudo systemctl restart postgresql.service

Criação de um novo arquivo de configuração de repositório do PostgreSQL:

$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

Importação de chave do repositório:

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

Atualização da listas de pacotes:

$ sudo apt-get update

Instalação do PostgreSQL versão 12:

$ sudo apt install postgresql-12

Conferência de 2 instâncias, uma da versão 9.5 e a nova, versão 12:

$ sudo pg_lsclusters
Ver Cluster Port Status Owner    Data directory               Log file
12 main    5433 online  postgres /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12-main.log
9.5 main    5432 online postgres /var/lib/postgresql/9.5/main /var/log/postgresql/postgresql-9.5-main.log

Parando o serviço do PostgreSQL:

$ sudo systemctl stop postgresql

Renomeando a instância da versão 12:

$ sudo pg_renamecluster 12 main mainnew

Atualizando a instância 9.5. Este procedimento pode demorar alguns minutos pois faz a migração de dados:

$ sudo pg_upgradecluster 9.5 main

Restarting old cluster with restricted connections...
Notice: extra pg_ctl/postgres options given, bypassing systemctl for start operation
Creating new PostgreSQL cluster 12/main ...
/usr/lib/postgresql/12/bin/initdb -D /var/lib/postgresql/12/main --auth-local peer --auth-host md5 --encoding UTF8 --lc-collate en_US.UTF-8 --lc-ctype en_US.UTF-8
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale "en_US.UTF-8".
The default text search configuration will be set to "english".

Data page checksums are disabled.

fixing permissions on existing directory /var/lib/postgresql/12/main ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... America/Sao_Paulo
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok


[...]


Configuring old cluster to use a different port (5434)...

Success. Please check that the upgraded cluster works. If it does,
you can remove the old cluster with
    pg_dropcluster 9.5 main

Ver Cluster Port Status Owner    Data directory               Log file
9.5 main    5434 down   postgres /var/lib/postgresql/9.5/main /var/log/postgresql/postgresql-9.5-main.log
Ver Cluster Port Status Owner    Data directory              Log file
12  main    5432 down   postgres /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12-main.log

Conferir a existência de 3 instâncias:

$ pg_lsclusters
Ver Cluster Port Status Owner    Data directory               Log file
9.5 main    5434 down   postgres /var/lib/postgresql/9.5/main /var/log/postgresql/postgresql-9.5-main.log
12 mainnew    5433 down postgres /var/lib/postgresql/12/mainnew /var/log/postgresql/postgresql-12-mainnew.log
12 main    5432 down postgres /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12-main.log

Remover a antiga instância 9.5 e a 12 padrão, desnecessárias:

$ sudo pg_dropcluster 9.5 main
$ sudo pg_dropcluster 12 mainnew

Reiniciar o serviço do PostgreSQL:

$ sudo systemctl start postgresql

Verifique que o serviço do PostgreSQL subiu com sucesso:

$ sudo systemctl status postgresql

Recrie a extensão que dá suporte a pesquisa de textos:

$ psql -h 127.0.0.1 -U md2net qualitymanager -c "create extension unaccent"

Reinicie o Tomcat:

$ sudo systemctl start tomcat9.service

Em caso de erro em algum passo no procedimento, recomenda-se a execução do procedimento de restauração do backup.