Atualização PostgreSQL 12 para versão16
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.512 para versão 12.16. 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 tomcat9.tomcat10.service
$ sudo systemctl restart postgresql.service
CriaçãPara iniciar o deupgrade, um novo arquivo de configuração de repositóusuário dodeverá PostgreSQL:estar logado com o usuário ROOT e executar os comandos abaixo::
$ sudoapt install -y postgresql-common
$ /usr/share/postgresql-common/pgdg/apt.postgresql.org.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-getapt update
Instalação do PostgreSQL versão 12:16:
$ sudo apt install postgresql-1216
Conferência de 23 instâncias, uma da versão 9.512, outra da 14 e a nova, versão 12:16:
$ sudo 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.log
14 main 5433 online postgres /var/lib/postgresql/14/main /var/log/postgresql/postgresql-14-main.log
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
Acessando com o usuário postgres:
$ su - postgres
Renomeando a instância da versão 12:16:
$ sudopg_renamecluster 16 main main16
Atualizando a instância da versão 16:
$ pg_renamecluster 1216 main mainnewmain16
Atualizando a instância 9.5. Este procedimento pode demorar algunsalgumas minutoshoras 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
Logout do usuário postgres:
$ exit
Iniciando o serviço do postgreSQL:
$ systemctl start postgresql
$ systemctl status postgresql
Acessando com o usuário postgres:
$ su - postgres /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12-main.log
Conferir a existência de 34 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 downonline 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
16 main16 5434 online postgres /var/lib/postgresql/16/main16 /var/log/postgresql/postgresql-16-main16.log
Remover a antiga instância 9.512, 14 e a 12 padrão,16, desnecessárias:
$ sudopg_dropcluster 12 main --stop
$ pg_dropcluster 9.514 main --stop
$ pg_dropcluster 16 main16 --stop
Logout do usuário postgres:
$ sudo pg_dropcluster 12 mainnewexit
Parando o serviço do postgreSQL:
$ systemctl stop postgresql
Acessando com o usuário postgres:
$ su - postgres
Reiniciar o serviço do PostgreSQL:
$ sudo systemctl start postgresql
Verifique que o serviço do PostgreSQL subiu com sucesso:
$ sudo systemctl status postgresqlRecrie 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.serviceEm caso de erro em algum passo no procedimento, recomenda-se a execução do procedimento de restauração do backup.