pg_upgrade
. As instruções nesta página descrevem os passos de atualização para o
AlloyDB Omni implementado como um servidor autónomo e para o
AlloyDB Omni configurado como nós de espera replicados. A utilização de
pg_upgrade
ajuda a garantir que a atualização é concluída sem perda de dados.
Para mais informações sobre as opções de atualização do PostgreSQL, consulte o artigo pg_upgrade.
Antes de começar
- Antes de iniciar a atualização, recomendamos que faça uma cópia de segurança completa do cluster da base de dados.
Para garantir que o serviço AlloyDB Omni 15 está em execução, execute o seguinte comando:
Docker
docker exec ALLOYDB15_CONTAINER psql -U postgres -c "SELECT 1;"
Podman
podman exec ALLOYDB15_CONTAINER psql -U postgres -c "SELECT 1;"
A extensão
pg_squeeze
no PostgreSQL 15 não é suportada no AlloyDB Omni PostgreSQL 16.8.0. Sepg_squeeze
estiver na sua instalação do AlloyDB Omni 15, tem de remover a extensão antes de fazer a atualização para o AlloyDB Omni 16.Se instalou extensões personalizadas além do AlloyDB Omni, certifique-se de que essas extensões personalizadas também estão instaladas na imagem 16.8.0. Verifique as extensões instaladas executando o seguinte comando:
Docker
docker exec ALLOYDB15_CONTAINER psql -U postgres -d postgres -c " SELECT * FROM pg_extension;"
Podman
podman exec ALLOYDB15_CONTAINER psql -U postgres -d postgres -c " SELECT * FROM pg_extension;
Se estiver a atualizar a partir da versão 15.5.2 ou anterior do AlloyDB Omni, tem de atualizar primeiro para uma versão mais recente do AlloyDB Omni 15. Migre da versão 15.5.2 e anteriores do AlloyDB Omni para a versão mais recente.
Atualize o AlloyDB Omni num ambiente de contentor do Docker
Para atualizar do AlloyDB Omni PostgreSQL 15 para o AlloyDB Omni PostgreSQL 16.8.0 num ambiente de contentor do Docker ou Podman, siga estes passos:
Docker
Copie
bin
e partilhe o diretório da versão do contentor do AlloyDB Omni que quer atualizar:mkdir -p TMP/alloydb15_bin TMP/alloydb15_share docker cp ALLOYDB15_CONTAINER:/usr/lib/postgresql/15 TMP/alloydb15_bin docker cp ALLOYDB15_CONTAINER:/usr/share/postgresql/15 TMP/alloydb15_share
Crie um novo diretório de dados para o contentor do AlloyDB Omni PostgreSQL 16 onde os dados atualizados vão ser armazenados:
mkdir -p DATA_PATH/16/data chown 999 DATA_PATH/16/data
Inicie o contentor do AlloyDB Omni PostgreSQL 16 em execução com todos os caminhos montados na mesma rede que o contentor do AlloyDB Omni anterior. Veja o exemplo seguinte:
docker run -d --name ALLOYDB16_CONTAINER \ -e POSTGRES_PASSWORD=PASSWORD -e PGPORT=5433 \ -v DATA_PATH/16/data:/var/lib/postgresql/data \ -v DATA_PATH/15/data:/var/lib/postgresql/old_data \ -v TMP/alloydb15_bin/15:/usr/lib/postgresql/15 \ -v TMP/alloydb15_share/15:/usr/share/postgresql/15 \ --network container:ALLOYDB15_CONTAINER \ google/alloydbomni:IMAGE_TAG /bin/sleep infinity
Inicialize o novo diretório de dados para a versão atualizada do contentor.
docker exec -u postgres ALLOYDB16_CONTAINER bash -c " cd /tmp; initdb -D /var/lib/postgresql/data --frozen-collations --encoding=UTF8 --locale=C --locale-provider=icu --icu-locale=und-x-icu
Se o cluster antigo tiver definições especiais, por exemplo,
--data-checksum
ou--locale
, também tem de transmitir esses parâmetros para criar o contentor do AlloyDB Omni 16.Se ativou a política de reinício no contentor da versão anterior, tem de desativar a política de reinício, conforme mostrado no exemplo seguinte:
docker update --restart=no ALLOYDB15_CONTAINER
Execute
pg_upgrade --check
para verificar se o cluster está pronto para ser atualizado para o AlloyDB Omni 16.docker exec -u postgres ALLOYDB16_CONTAINER bash -c " cd /tmp; pg_upgrade -p 5432 -P 5433 --check -v \ -b /usr/lib/postgresql/15/bin \ -B /usr/lib/postgresql/16/bin \ -d /var/lib/postgresql/old_data \ -D /var/lib/postgresql/data"
Após a conclusão do comando
pg_upgrade --check
, é apresentado um resultado que termina comClusters are compatible
, o que indica que o cluster está pronto para ser atualizado. Este comando também verifica e encerra o contentor do AlloyDB Omni PostgreSQL 15. Após a conclusão dapg_upgrade --check
, as aplicações já não podem estabelecer ligação à base de dados nem executar consultas.Execute
pg_upgrade
para copiar os dados atualizados para o novo diretório de dados e, em seguida, verifique sepg_upgrade
foi concluído com êxito e se o contentor do AlloyDB Omni PostgreSQL 15 foi terminado:docker exec -u postgres ALLOYDB16_CONTAINER bash -c " cd /tmp; pg_upgrade -v --copy \ -b /usr/lib/postgresql/15/bin \ -B /usr/lib/postgresql/16/bin \ -d /var/lib/postgresql/old_data \ -D /var/lib/postgresql/data" docker ps -a
Se o
pg_upgrade
falhar, reverta para o contentor do AlloyDB Omni PostgreSQL 15 iniciando o contentor do PostgreSQL 15:docker logs ALLOYDB16_CONTAINER docker rm -f ALLOYDB15_CONTAINER ALLOYDB16_CONTAINER docker run -d --name ALLOYDB15_CONTAINER -p 5432:5432 \ -e POSTGRES_PASSWORD=postgres \ -v DATA_PATH/15/data:/var/lib/postgresql/data \ google/alloydbomni:15
Para determinar os motivos da falha na atualização, reveja os registos.
Se a atualização for bem-sucedida, limpe e, em seguida, reinicie o contentor do AlloyDB Omni PostgreSQL 16:
docker rm -f ALLOYDB16_CONTAINER ALLOYDB15_CONTAINER docker run -d --name ALLOYDB16_CONTAINER -p 5432:5432 \ -e POSTGRES_PASSWORD=postgres \ -v DATA_PATH/16/data:/var/lib/postgresql/data \ google/alloydbomni:16
Podman
Copie
bin
e partilhe o diretório da versão do contentor do AlloyDB Omni que quer atualizar:mkdir -p TMP/alloydb15_bin TMP/alloydb15_share podman cp ALLOYDB15_CONTAINER:/usr/lib/postgresql/15 TMP/alloydb15_bin podman cp ALLOYDB15_CONTAINER:/usr/share/postgresql/15 TMP/alloydb15_share
Crie um novo diretório de dados para o contentor do AlloyDB Omni PostgreSQL 16 onde os dados atualizados vão ser armazenados:
mkdir -p DATA_PATH/16/data chown 999 DATA_PATH/16/data
Inicie o contentor do AlloyDB Omni PostgreSQL 16 em execução com todos os caminhos montados na mesma rede que o contentor do AlloyDB Omni anterior. Veja o exemplo seguinte:
podman run -d --name ALLOYDB16_CONTAINER \ -e POSTGRES_PASSWORD=PASSWORD -e PGPORT=5433 \ -v DATA_PATH/16/data:/var/lib/postgresql/data \ -v DATA_PATH/15/data:/var/lib/postgresql/old_data \ -v TMP/alloydb15_bin/15:/usr/lib/postgresql/15 \ -v TMP/alloydb15_share/15:/usr/share/postgresql/15 \ --network container:ALLOYDB15_CONTAINER \ google/alloydbomni:16 /bin/sleep infinity
Inicialize o novo diretório de dados para a versão atualizada do contentor.
podman exec -u postgres ALLOYDB16_CONTAINER bash -c " cd /tmp; initdb -D /var/lib/postgresql/data --frozen-collations --encoding=UTF8 --locale=C --locale-provider=icu --icu-locale=und-x-icu
Se o cluster antigo tiver definições especiais, por exemplo,
--data-checksum
ou--locale
, também tem de transmitir esses parâmetros para criar o contentor do AlloyDB Omni 16.Se ativou a política de reinício no contentor da versão anterior, tem de desativar a política de reinício, conforme mostrado no exemplo seguinte:
podman update --restart=no ALLOYDB15_CONTAINER
Execute
pg_upgrade --check
para verificar se o cluster está pronto para ser atualizado para o AlloyDB Omni 16.podman exec -u postgres ALLOYDB16_CONTAINER bash -c " cd /tmp; pg_upgrade -p 5432 -P 5433 --check -v \ -b /usr/lib/postgresql/15/bin \ -B /usr/lib/postgresql/16/bin \ -d /var/lib/postgresql/old_data \ -D /var/lib/postgresql/data"
Após a conclusão do comando
pg_upgrade --check
, é apresentado um resultado que termina comClusters are compatible
, o que indica que o cluster está pronto para ser atualizado. Este comando também verifica e encerra o contentor do AlloyDB Omni PostgreSQL 15. Após a conclusão dapg_upgrade --check
, as aplicações já não podem estabelecer ligação à base de dados nem executar consultas.Execute
pg_upgrade
para copiar os dados atualizados para o novo diretório de dados e, em seguida, verifique sepg_upgrade
foi concluído com êxito e se o contentor do AlloyDB Omni PostgreSQL 15 foi terminado:podman exec -u postgres ALLOYDB16_CONTAINER bash -c " cd /tmp; pg_upgrade -v --copy \ -b /usr/lib/postgresql/15/bin \ -B /usr/lib/postgresql/16/bin \ -d /var/lib/postgresql/old_data \ -D /var/lib/postgresql/data" podman ps -a
Se o
pg_upgrade
falhar, reverta para o contentor do AlloyDB Omni PostgreSQL 15 iniciando o contentor do PostgreSQL 15:podman logs ALLOYDB16_CONTAINER podman rm -f ALLOYDB15_CONTAINER ALLOYDB16_CONTAINER podman run -d --name ALLOYDB15_CONTAINER -p 5432:5432 \ -e POSTGRES_PASSWORD=postgres \ -v DATA_PATH/15/data:/var/lib/postgresql/data \ google/alloydbomni:15
Para determinar os motivos da falha na atualização, reveja os registos.
Se a atualização for bem-sucedida, limpe e, em seguida, reinicie o contentor do AlloyDB Omni PostgreSQL 16:
podman rm -f ALLOYDB16_CONTAINER ALLOYDB15_CONTAINER podman run -d --name ALLOYDB16_CONTAINER -p 5432:5432 \ -e POSTGRES_PASSWORD=postgres \ -v DATA_PATH/16/data:/var/lib/postgresql/data \ google/alloydbomni:16
Atualize o servidor AlloyDB Omni no nó em espera
Se o seu servidor AlloyDB Omni estiver implementado com uma configuração de standby replicada ativa e de streaming, não pode executar o pg_upgrade
no nó de standby. Para atualizar o servidor AlloyDB Omni num nó de espera, recomendamos que, antes de atualizar o AlloyDB Omni no nó ativo, se certifique de que não existem atrasos na replicação no nó de espera.
Para atualizar o servidor AlloyDB Omni em espera, siga estes passos de alto nível:
- Pare o contentor do AlloyDB Omni em modo de espera antes de atualizar o nó ativo.
- Depois de atualizar o nó ativo, sincronize o diretório de dados atualizado do
novo nó ativo para o nó de espera através do comando rsync.
Para mais informações sobre a atualização de um servidor de reserva replicado de streaming,
consulte
pg_upgrade
. - Inicie o contentor com a imagem do PostgreSQL 16 do AlloyDB for PostgreSQL usando o mesmo diretório de dados.
Se estiver a usar a replicação lógica, consulte o artigo Atualizar dados através da replicação.