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é?
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
Deixe um comentário