Azure · CosmosDB · Migração · PostgreSQL

Migración de recursos entre Subscriptions – CosmosDB for PostgreSQL Cluster

Estaba participando de un proyecto que iba a realizar la migración de diversos recursos de una Subscription a otra, en el mismo Tenant.

La idea era utilizar el Azure Resource Mover para que el proceso ocurriera de forma rápida y sencilla

Sin embargo como pueden ver, CosmosDB for PostgreSQL Cluster es del Resource Type microsoft.dbforpostgresql/servergroupsv2, que de acuerdo con la documentación de Microsoft no es soportado para este tipo de operación

Pero aun así, intenté hacerlo mediante el Azure Resource Mover, ya que ya tenía el recurso, ¿no?

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

Entonces, lo que necesitaba hacerse era un dump y restore de los datos y es un camino bastante simple, siempre que se preste atención al siguiente hecho: PostgreSQL debe estar en la misma versión, tanto en origen como en destino.

Para los próximos pasos necesitarás las utilidades de PostgreSQL, y no necesitas ni instalar, basta con descargar el zip directamente en este sitio aquí

Verificando la versión de PostgreSQL

En el Portal de Azure, busca tu Azure CosmosDB for PostgreSQL Cluster y en las informaciones generales (Overview) encontrarás PostgreSQL version

Si ya tienes los ejecutables de PostgreSQL, también es posible hacerlo directamente desde la línea de comandos

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

Se te pedirá que introduzcas la contraseña del usuario y, luego, estarás ejecutando comandos SQL dentro del cluster

SELECT version();

Entonces, en este caso, PostgreSQL 15.5, y el servidor de destino debe estar con la misma versión

Para salir de la línea de comandos de SQL, basta escribir

\q

Realizar dump (pg_dump)

Vamos a necesitar realizar un dump del Schema donde están las tablas y, también, de los datos

Schema-only

Ejecutar el comando a continuación y, después, ingresar la contraseña para el usuario

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

Espera a que vuelva la línea de comandos y ve a la carpeta, debes encontrar el archivo que colocaste en el parámetro –file

Datos

Ejecutar el comando a continuación y, luego, ingresar la contraseña para el usuario

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

Realizar el restore (pg_restore)

Asumiendo que ya tienes el CosmosDB for PostgreSQL Cluster en la Subscription de destino, vamos a realizar el restore

Schema-only

La restauración debe realizarse en este orden, ya que el archivo SQL generado por el dump del Schema-only será responsable de crear las tablas, así como funciones que existen en ese schema.

Inclusive, algunos errores son esperados en este tipo de restauración, pero basta estar atento a los errores, ya que pueden estar intentando crear algo que ya existe y está bien.

Ejecutar el comando a continuación y, luego, ingresar la contraseña para el usuario

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

Y aquí algunos errores comunes, por ejemplo, intentando crear el schema public, cuando este ya existe en el destino

Al final, la ejecución te da un resumen de los errores y, en mi caso, fueron 15, pero que no atrajeron el proceso de restore

Datos

Una vez que las tablas y otros prerrequisitos ya fueron creados, ahora vamos a iniciar la restauración de los datos.

Ejecutar el comando a continuación y, luego, ingresar la contraseña para el usuario

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

Diferentemente de la restauración del schema, la restauración de datos debe ocurrir sin errores, ya que las tablas deben estar vacías y recibirán nuevos datos

Verificar los datos

Conectar vía SQL query al CosmosDB for PostgreSQL Cluster donde se migraron los datos

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

Escribe el siguiente comando para listar todas las tablas de todos los schemas, en mi caso, las que pertenecen al public

\dt

Elige una de las tablas y escribe el siguiente comando

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

Fuentes:

AzureAzure CosmosDBAzure CosmosDB for PostgreSQL ClusterCosmosDB PostgredumpMigraçãoPostgreSQLrestoresubscriptions
Migración de recursos entre Subscriptions – CosmosDB for PostgreSQL Cluster — Vinicius Deschamps