Skip to main content

Atualização PostgreSQL 16 para versão 17

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 1216 para versão 16.17. Atente-se aos requisitos e alertas deste tópico antes de iniciar a atualização.

  • Faça backup da máquina virtual (VM) antes de iniciar o procedimento. Pode ser adotado outro procedimento de backup. A sugestão é backup por snapshot pois o RTO (Recovery Time Objective) é menor.
  • Se programe para a indisponibilidade. O procedimento pode demorar pelo menos 60 minutos. Variará de acordo com o tamanho do banco de dados e capacidade dos recursos. Considere na estimativa o tempo de retorno em caso de incidente.
  • Garanta que o banco de dados não está em uso, seja pela aplicação MD2 QualityManager ou outro.
  • Garanta que a máquina virtual tenha acesso ao repositório oficial do PostgreSQL:
    https://​​​​​​​postgresql.org​​​​​​​
  • A depender da origem do servidor, se é oriunda da OVA padrão distribuída pela MD2 QualityManager, o usuário "md2net" pode não ter permissão para executar alguns comandos. Recomendamos a avaliação prévia ou a utilização do usuário "root".

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 tomcat10.service
$ sudo systemctl restart postgresql.service

Para iniciar o upgrade, o usuário deverá estar logado com o usuário ROOTMD2NET e executar os comandos abaixo::

$ apt installpsql -yh postgresql-common127.0.0.1 -U md2net -c "ALTER USER postgres WITH PASSWORD 'md2net2018';" qualitymanager
$ /usr/share/postgresql-common/pgdg/apt.postgresql.org.shsudo $su apt update-

InstalaçãAcessando com o dousuário PostgreSQL versão 16:postgres:

$ sudosu apt- install postgresql-16postgres

ConferênciaExecutar deos 3comandos instâncias, uma da versão 12, outra da 14 e a nova, versão 16:abaixo:

$ sudosu pg_lsclusters
Ver Cluster Port Status Owner    Data directory               Log file
16 main    5433 online- postgres
/var/lib/postgresql/16/main$ /var/log/postgresql/postgresql-16-main.logpsql 14-c main"ALTER 5433DATABASE onlinequalitymanager REFRESH COLLATION VERSION;"
$ psql -c "ALTER DATABASE postgres /var/lib/postgresql/14/mainREFRESH /var/log/postgresql/postgresql-14-main.logCOLLATION 12VERSION;"
main$ 5433psql online-c postgres"ALTER /var/lib/postgresql/12/mainDATABASE  /var/log/postgresql/postgresql-12-main.logmensageria_qm REFRESH COLLATION VERSION;"
$ psql -c "ALTER DATABASE  template1 REFRESH COLLATION VERSION;"
$ exit

Parando o serviço do PostgreSQL:

$ sudo systemctl stop postgresql

Mudando o timezone do arquivo de configuração do poatgresql:

$ vim vim /etc/postgresql/16/main/postgresql.conf

## Mude "log_timezone": "US/Pacific" para "log_timezone": "Etc/GMT-3"

Arquivo antes da edição:



Arquivo após edição:

image.png

Instalação do PostgreSQL versão 17:

$ sudo apt install postgresql-17

Acessando com o usuário postgres:

$ su - postgres

Renomeando a instância da versão 16:17:

$ pg_renamecluster 1617 main main16

Atualizando  a instância da versão 16:

$ pg_renamecluster 16 main main16main17

Atualizando a instância 9.5.16.

Este procedimento pode demorar algumas horas pois faz a migração de dados:

$ pg_upgradecluster 1216 main 

LogoutConferência dode 3 usuárioinstâncias, postgres:duas da versão 16 e a nova, versão 17:

$ exit

Iniciando o serviço do postgreSQL:

$ systemctl start postgresql
$ systemctl status postgresql

Acessando com o usuário postgres:

$ su - postgres

Conferir a existência de 4 instâncias:

$sudo pg_lsclusters
Ver Cluster Port Status Owner    Data directory               Log file
1216 main    5432 online postgres /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12-main.log
14 main    5433 online postgres /var/lib/postgresql/14/main /var/log/postgresql/postgresql-14-main.log
16 main    5435 down postgres /var/lib/postgresql/16/main /var/log/postgresql/postgresql-16-main.log
1617 main16main    5434 online postgres /var/lib/postgresql/16/main1617/main /var/log/postgresql/postgresql-16-main16.17-main.log
17 main17  5433 down postgres /var/lib/postgresql/17/main17 /var/log/postgresql/postgresql-17-main17.log

Remover a antiga instância 12, 1416 e a 16,17, desnecessárias:

$ pg_dropcluster 1217 main --stop
$ pg_dropcluster 14 mainmain17 --stop
$ pg_dropcluster 16 main16main --stop

Logout do  usuário postgres:

$ exit

Parando o serviço do postgreSQL:

$ systemctl stop postgresql

Mudando a porta do postgreSQL, mude para a porta 5432:

$ vim /etc/postgresql/16/17/main/postgresql.conf

Arquivo antes da edição:



image.png

Arquivo após edição:

Iniciando o serviço do PostgreSQL:

$ sudo systemctl start postgresql

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

$ systemctl status postgresql

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