Migración de PostgreSQL a Aurora DSQL
Aurora DSQL se ha diseñado para ser compatible con PostgreSQL y admite características relacionales básicas como las transacciones ACID, los índices secundarios, las uniones y las operaciones DML estándar. La mayoría de las aplicaciones PostgreSQL existentes pueden migrar a Aurora DSQL con cambios mínimos.
En esta sección se proporcionan orientaciones prácticas para migrar la aplicación a Aurora DSQL, incluidos la compatibilidad con marcos, los patrones de migración y consideraciones de la arquitectura.
Compatibilidad con marcos y ORM
Aurora DSQL usa el protocolo de conexión estándar de PostgreSQL, lo que garantiza la compatibilidad con controladores y marcos de PostgreSQL. Las asignaciones relacionales de objetos (ORM) más populares funcionan con Aurora DSQL con cambios mínimos o sin cambios. Consulte Adaptadores y dialectos de Aurora DSQL para ver implementaciones de referencia e integraciones de ORM disponibles.
Patrones de migración comunes
Al migrar de PostgreSQL a Aurora DSQL, algunas características funcionan de forma diferente o tienen una sintaxis alternativa. En esta sección se proporciona orientación sobre escenarios de migración comunes.
Alternativas a las operaciones DDL
Aurora DSQL ofrece alternativas modernas a las operaciones de lenguaje de definición de datos (DDL) tradicionales de PostgreSQL:
- Creación de índices
-
Utilice
CREATE INDEX ASYNCen lugar deCREATE INDEXpara la creación de índices sin bloqueo.Ventaja: Creación de índices sin tiempo de inactividad en tablas grandes.
- Eliminación de datos
-
Use
DELETE FROM table_nameen lugar deTRUNCATE.Alternativa: Para una recreación completa de las tablas, utilice
DROP TABLEy, a continuación,CREATE TABLE. - Configuración del sistema
-
Aurora DSQL no admite los comandos
ALTER SYSTEMporque el sistema está totalmente administrado. La configuración se gestiona automáticamente en función de los patrones de carga de trabajo.Ventaja: No es necesario ajustar la base de datos ni administrar los parámetros.
Patrones de diseño de esquema
Adapte estos patrones comunes de PostgreSQL para que sean compatibles con Aurora DSQL:
- Secuencias para claves
-
Utilice identificadores únicos universales (UUID) o claves compuestas en lugar de secuencias que se incrementen de forma automática. Las secuencias que se incrementan automáticamente conllevan una gran cantidad de conflictos en un sistema distribuido, ya que varios escritores intentan actualizar los mismos datos. Los UUID proporcionan la misma función, pero no requieren coordinación.
Ejemplo de:
id UUID PRIMARY KEY DEFAULT gen_random_uuid() - Patrones de integridad referencial
-
Aurora DSQL admite relaciones de tablas y operaciones
JOIN, pero aún no impone restricciones de clave externa. Esta elección de diseño se ajusta a los patrones modernos de bases de datos distribuidas, en los que la validación de la capa de aplicaciones proporciona más flexibilidad y evita cuellos de botella en el rendimiento derivados de las operaciones en cascada.Patrón: Implemente comprobaciones de integridad referencial en la capa de aplicaciones mediante convenciones de nomenclatura, lógica de validación y límites de transacción coherentes. Muchas aplicaciones a gran escala prefieren este enfoque para controlar mejor la gestión de errores y el rendimiento.
- Gestión de datos temporales
-
Utilice CTE, subconsultas o tablas normales con lógica de limpieza en lugar de tablas temporales.
Alternativa: Cree tablas con nombres específicos de cada sesión y límpielas en su aplicación.
Descripción de las diferencias arquitectónicas
La arquitectura distribuida y sin servidor de Aurora DSQL se diferencia de manera intencionada de PostgreSQL tradicional en varias áreas. Estas diferencias hacen posibles los beneficios clave de simplicidad y escala de Aurora DSQL.
Modelo simplificado de la base de datos
- Base de datos única por clúster
-
Aurora DSQL proporciona una base de datos integrada denominada
postgrespor clúster.Consejo de migración: Si la aplicación utiliza varias bases de datos, cree clústeres de Aurora DSQL independientes para una separación lógica o utilice esquemas dentro de un único clúster.
- Ausencia de tablas temporales
-
Aún no se admiten las tablas temporales en Aurora DSQL. Se pueden utilizar expresiones de tabla comunes (CTE) y subconsultas como alternativa para consultas complejas.
Alternativa: Utilice CTE con cláusulas
WITHpara conjuntos de resultados temporales o tablas normales con nombres únicos para datos específicos de la sesión. - Administración de almacenamiento automática
-
Aurora DSQL elimina los espacios de tabla y la administración de almacenamiento manual. El almacenamiento se escala y se optimiza automáticamente en función de sus patrones de datos.
Ventaja: No es necesario supervisar el espacio en disco, planificar la asignación de almacenamiento ni administrar las configuraciones de los espacios de tabla.
Patrones de aplicación modernos
Aurora DSQL fomenta los patrones de desarrollo de aplicaciones modernos que mejoran la capacidad de mantenimiento y el rendimiento:
- Lógica de nivel de aplicación en lugar de desencadenadores de bases de datos
-
Aurora DSQL no admite los desencadenadores.
Estrategia de migración: Traslade la lógica de los desencadenadores al código de la aplicación, utilice arquitecturas basadas en eventos con servicios de AWS como EventBridge o implemente registros de auditoría mediante el registro de aplicaciones.
- Funciones SQL para el procesamiento de datos
-
Aurora DSQL admite funciones basadas en SQL, pero no lenguajes procedurales como PL/pgSQL.
Alternativa: Utilice funciones SQL para las transformaciones de datos o traslade la lógica compleja a la capa de aplicación o a funciones de AWS Lambda.
- Control de simultaneidad optimista en lugar de bloqueo pesimista
-
Aurora DSQL utiliza el control de simultaneidad optimista (OCC), un enfoque sin bloqueos diferente a los mecanismos de bloqueo de bases de datos tradicionales. En lugar de adquirir bloqueos que afecten a otras transacciones, Aurora DSQL permite que las transacciones continúen sin bloquearse y detecta los conflictos en el momento de la confirmación. De este modo, se eliminan los interbloqueos y se impide que las transacciones lentas bloqueen otras operaciones.
Diferencia clave: Cuando se producen conflictos, Aurora DSQL devuelve un error de serialización en lugar de hacer que las transacciones esperen bloqueos. Esto requiere que las aplicaciones implementen una lógica de reintento, similar a la gestión de tiempos de espera de bloqueo en las bases de datos tradicionales, pero los conflictos se resuelven de forma inmediata en lugar de provocar esperas de bloqueo.
Patrón de diseño: Implemente lógica de transacción idempotente con mecanismos de reintento. Diseñe esquemas para minimizar la contención mediante claves principales aleatorias y la distribución de actualizaciones en todo su intervalo de claves. Para obtener más información, consulte Control de simultaneidad en Aurora DSQL.
- Relaciones e integridad referencial
-
Aurora DSQL admite las relaciones de claves externas entre tablas, incluidas las operaciones
JOIN, pero aún no se admiten restricciones de clave externa. Si bien aplicar la integridad referencial puede resultar útil, las operaciones en cascada (como las eliminaciones en cascada) pueden provocar problemas de rendimiento inesperados; por ejemplo, eliminar un pedido con mil partidas se convierte en una transacción de mil y una filas. Por este motivo, muchos clientes evitan las restricciones de clave externa.Patrón de diseño: Implemente comprobaciones de integridad referencial en la capa de aplicaciones, utilice patrones de coherencia final o aproveche los servicios de AWS para la validación de datos.
Simplificaciones operativas
Aurora DSQL elimina muchas de las tareas tradicionales de mantenimiento de bases de datos, lo que reduce la sobrecarga operativa:
- No se requiere mantenimiento manual
-
Aurora SQL no requiere comandos
VACUUM,TRUNCATEniALTER SYSTEM. El sistema administra automáticamente la optimización del almacenamiento, la recopilación de estadísticas y el ajuste del rendimiento.Ventaja: Elimina la necesidad de ventanas de mantenimiento de base de datos, la programación del vaciado y la afinación de los parámetros del sistema.
- Particionamiento y escalado automáticos
-
Aurora DSQL particiona y distribuye sus datos de forma automática en función de los patrones de acceso. No son necesarios el particionamiento manual ni las secuencias.
Consejo de migración: Elimine la lógica de particionamiento manual y deje que Aurora DSQL se encargue de la distribución de datos. Utilice UUID o ID generados por la aplicación en lugar de secuencias.
Migración asistida por IA
Puede aprovechar las herramientas de IA para ayudar a migrar su código base a Aurora DSQL:
Uso de Kiro para obtener ayuda con la migración
Los agentes de codificación como Kiro
-
Análisis del esquema: Cargue sus archivos de esquema existentes y pida a Kiro que identifique los posibles problemas de compatibilidad y que sugiera alternativas
-
Transformación de código: Proporcione el código de su aplicación y pida a Kiro que ayude a refactorizar la lógica de desencadenador, reemplazar secuencias con UUID o modificar patrones de transacción
-
Planificación de la migración: Pida a Kiro que cree un plan de migración paso a paso basado en la arquitectura específica de su aplicación
Ejemplos de peticiones a Kiro:
"Analyze this PostgreSQL schema for DSQL compatibility and suggest alternatives for any unsupported features" "Help me refactor this trigger function into application-level logic for DSQL migration" "Create a migration checklist for moving my Django application from PostgreSQL to DSQL"
Servidor MCP de Aurora DSQL
El servidor de protocolo de contexto para modelos (MCP) de Aurora DSQL permite a los asistentes de IA como Claude conectarse directamente a su clúster de Aurora DSQL y consultar la documentación de Aurora DSQL. Esto permite a la IA:
-
Analizar el esquema existente y sugerir cambios de migración
-
Probar consultas y comprobar la compatibilidad durante la migración
-
Proporcionar directrices precisas y actualizadas basadas en la documentación más reciente de Aurora DSQL
Para utilizar el servidor MCP de Aurora DSQL con Claude u otros asistentes de IA, consulte las instrucciones de configuración para el servidor MCP de Aurora DSQL.
Consideraciones de Aurora DSQL para la compatibilidad de PostgreSQL
Aurora DSQL presenta diferencias en la compatibilidad de las características con respecto a la instancia de PostgreSQL autoadministrada, las cuales permiten su arquitectura distribuida, funcionamiento sin servidor y escalado automático. La mayoría de las aplicaciones funcionan dentro de estas diferencias sin hacer ninguna modificación.
Para obtener información general, consulte Consideraciones para trabajar con Amazon Aurora DSQL. Para obtener información acerca de las cuotas y los límites, consulte Cuotas de clúster y límites de base de datos en Amazon Aurora DSQL.
-
Aurora DSQL utiliza una única base de datos integrada denominada
postgres. No puede crear bases de datos adicionales ni cambiar el nombre o eliminar la base de datos depostgres. -
La base de datos de
postgresutiliza la codificación de caracteres UTF-8. No puede cambiar la codificación del servidor. -
La base de datos usa solo la intercalación de
C. -
Aurora DSQL utiliza
UTCcomo la zona horaria del sistema. Postgres almacena internamente todas las fechas y horas que tienen en cuenta las zonas horarias en UTC. Puede configurar el parámetro de configuraciónTimeZonepara convertir la forma en que se muestra en el cliente y que sirva como valor predeterminado para las entradas del cliente que el servidor utilizará para convertir internamente a UTC. -
El nivel de aislamiento de las transacciones se fija en PostgreSQL
Repeatable Read. -
Las transacciones tienen las siguientes restricciones:
-
Una transacción no puede mezclar operaciones DDL y DML
-
Una transacción solo puede incluir 1 instrucción DDL
-
Una transacción puede modificar hasta 3000 filas, independientemente del número de índices secundarios
-
El límite de 3000 filas se aplica a todas las instrucciones DML (
INSERT,UPDATE,DELETE)
-
-
Las conexiones a la base de datos caducan después de 1 hora.
-
En estos momentos, Aurora DSQL no le permite ejecutar
GRANT [permission] ON DATABASE. Si intenta ejecutar esa instrucción, Aurora DSQL devuelve el mensaje de errorERROR: unsupported object type in GRANT. -
Aurora DSQL no permite que los roles de usuario que no son administradores ejecuten el comando
CREATE SCHEMA. No puede ejecutar el comandoGRANT [permission] on DATABASEni conceder permisosCREATEen la base de datos. Si un rol de usuario que no es administrador intenta crear un esquema, Aurora DSQL devuelve el mensaje de errorERROR: permission denied for database postgres. -
Los usuarios que no son administradores no pueden crear objetos en el esquema público. Solo los usuarios administradores pueden crear objetos en el esquema público. El rol de usuario administrador tiene permisos para conceder acceso de lectura, escritura y modificación a estos objetos a los usuarios que no son administradores, pero no puede conceder permisos
CREATEal propio esquema público. Los usuarios que no son administradores deben utilizar esquemas diferentes, creados por el usuario, para la creación de objetos.
¿Necesita ayuda con la migración?
Si encuentra características que son fundamentales para la migración pero que actualmente no son compatibles con Aurora DSQL, consulte Aportación de comentarios sobre Amazon Aurora DSQL para obtener información sobre cómo compartir comentarios con AWS.