, , ,

Migração de recursos entre Subscriptions – CosmosDB for PostgreSQL Cluster

Avatar de Vinicius

Estava participando de um projeto que iria realizar a migração de diversos recursos de uma Subscription para outra, no mesmo Tenant.

A ideia era utilizar o Azure Resource Mover para que o processo ocorresse de forma rápida e simples

Porém como podem ver, CosmosDB for PostgreSQL Cluster é do Resource Type microsoft.dbforpostgresql/servergroupsv2, que de acordo com a documentação da Microsoft não é suportado para este tipo de operação

Mas mesmo assim, eu tentei fazer pelo Azure Resource Mover, afinal o não eu já tinha né?

This image has an empty alt attribute; its file name is azure-cosmos-db-for-postgresql-cluster-azure-resources-move-failed-errors-detailed.png

Então, o que precisava ser feito era um dump e restore dos dados e é um caminho bem simples, desde que você atente-se ao seguinte fato: PostgreSQL precisa estar na mesma versão, tanto na origem como no destino.

Para os próximos passos você vai precisar das utilidades PostgreSQL, e não precisa nem instalar, basta baixar o zip diretamente neste site aqui

Verificando a versão do PostgreSQL

No Azure Portal, você vai procurar pelo seu Azure CosmosDB for PostgreSQL Cluster e nas informações gerais (Overview) você vai encontrar PostgreSQL version

Caso você já tenha os executáveis do PostgreSQL, também é possível fazer diretamente pela linha de comando

.\psql.exe --host [postgresql-host] --username [username] --dbname [database-name]

Você será solicitado para digitar a senha do usuário e, em seguida, estará executando comandos SQL dentro do cluster

SELECT version();

Então, neste caso, PostgreSQL 15.5, e o servidor de destino precisa estar com a mesma versão

Para sair da linha de comando do SQL, basta digitar

\q

Realizar dump (pg_dump)

Vamos precisar realizar um dump do Schema onde estão as tabelas e, também, dos dados

Schema-only

Executar o comando abaixo e, em seguida, digitar a senha para o usuário

.\pg_dump.exe --host [postgresql-host] --username [username] --schema=[nome-do-schema] --no-owner --schema-only --file=[nome-do-arquivo.sql] --format=plain -Fc [banco-de-dados-para-fazer-dump]

Aguarde até que volte a linha de comando e vá até a pasta, você deve encontrar o arquivo que você colocou no parâmetro –file

Dados

Executar o comando abaixo e, em seguida, digitar a senha para o usuário

.\pg_dump.exe --host [postgresql-host] --username [username] --schema=[nome-do-schema] --no-owner --data-only --file=[nome-do-arquivo.dump] --format=custom -Fc [banco-de-dados-para-fazer-dump]

Realizar o restore (pg_restore)

Assumindo que você já tenha o CosmosDB for PostgreSQL Cluster na Subscription de destino, vamos realizar o restore

Schema-only

A restauração deve ocorrer nesta ordem, pois o arquivo SQL gerado pelo dump do Schema-only vai ser responsável por criar as tabelas, bem como funções que existem naquele schema.

Inclusive, alguns erros são esperados neste tipo de restauração, mas basta ficar atento para os erros, pois eles podem estar tentando criar algo que já existe e tudo bem.

Executar o comando abaixo e, em seguida, digitar a senha para o usuário

.\pg_restore.exe --host [postgresql-host] --username [usuário] --dbname=[banco-de-dados] [nome-do-arquivo.sql]

E aqui alguns erros comuns, por exemplo, tentando criar o schema public, sendo que este já existe no destino

Ao final, a execução te dá um resumo dos erros e, no meu caso, foram 15, mas que não atrapalharam o processo de restore

Dados

Uma vez que as tabelas e outros pré-requisitos já foram criados, agora vamos iniciar a restauração dos dados.

Executar o comando abaixo e, em seguida, digitar a senha para o usuário

.\pg_restore.exe --host [postgresql-host] --username [usuário] --dbname=[banco-de-dados] [nome-do-arquivo.dump]

Diferentemente da restauração do schema, a restauração de dados deve ocorrer sem erros, visto que as tabelas devem estar vazias e vão receber novos dados

Verificando os dados

Conectar via SQL query no CosmosDB for PostgreSQL Cluster onde os dados foram migrados

.\plsql.exe --host [postgresql-host] --username [usuário] --dbname [banco-de-dados]

Digite o comando abaixo para listar todas as tabelas de todos os schemas, no meu caso, são as que pertencem ao public

\dt

Escolha uma das tabelas e digite o seguinte comando

SELECT [COLUNA] FROM [SCHEMA].[TABELA];

Fontes:

  • https://learn.microsoft.com/pt-br/azure/azure-resource-manager/management/move-support-resources#microsoftdbforpostgresql
  • https://learn.microsoft.com/pt-br/azure/resource-mover/overview
  • https://docs.citusdata.com/en/v11.0/develop/migration_data_small.html
  • https://www.postgresql.org/docs/7.1/app-pgdump.html
Avatar de Vinicius

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *