postgres postgresql upgrade pg_upgrade

pg_upgrade

O programa pg_upgrade depende dos serviços, tanto da versão de origem quanto da versão de destino, não estejam no ar. Contudo, depende dos diretórios de dados estarem inicializados.

Quando executado, o pg_upgrade inicia as instâncias das duas versões e faz a transferência (cópia ou hard link) dos objetos que não sofreram alterações estruturais, assim como cria novos objetos no destino e copia os dados daqueles que sofreram alterações estruturais. Portanto, ele precisa conhecer as localizações dos diretórios de dados e dos diretórios de binários.

Para usar o modo de hard link, adicione -k nos comandos do pg_upgrade abaixo.

Prática

  1. Faça a inicialização de um PostgreSQL em duas versões majoritárias distintas.
  2. Popule um banco de dados na versão mais antiga com dados, por exemplo do pagila.
  3. Baixe os serviços.
  4. Execute o upgrade por um dos comandos abaixo usando, opcionalmente, o -k.
  5. Suba o serviço da nova versão.
  6. Valide os dados na nova versão com o psql, selects e metacomandos.

CentOS/RHEL

Upgrade pelo script de conveniência, apenas de uma versão para a próxima, executando o script da versão de destino:

[root@pg-1 ~]# /usr/pgsql-16/bin/postgresql-16-setup upgrade

Upgrade pelo pg_upgrade, fornecendo os diretórios de dados de origem (-d), de destino (-D) e diretórios dos executáveis de origem (-b) e de destino (-B), como postgres:

[postgres@pg-1 ~]$ /usr/pgsql-16/bin/pg_upgrade \
                              -d /var/lib/pgsql/14/data \
                              -D /var/lib/pgsql/16/data \
                              -b /usr/pgsql-14/bin \
                              -B /usr/pgsql-16/bin

Debian/Ubuntu

Upgrade pelo script de conveniência, fornecendo a versão de origem, como root ou postgres:

postgres@pg-1:~$ pg_upgradecluster 14 main

Upgrade pelo pg_upgrade, como postgres:

postgres@pg-1:~$  /usr/lib/postgresql/16/pg_upgrade \
                              -d /var/lib/postgresql/14/main \
                              -D /var/lib/postgresql/16/main \
                              -b /usr/lib/postgresql/14 \
                              -B /usr/lib/postgresql/16