DDL y las transacciones distribuidas en Aurora DSQL
En Aurora DSQL, el comportamiento del lenguaje de definición de datos (DDL) es distinto al de PostgreSQL. Aurora DSQL presenta una capa de base de datos distribuida y compartida Multi-AZ basada en flotas de computación y almacenamiento de varios inquilinos. Dado que no existe un único nodo principal o líder de base de datos, el catálogo de base de datos está distribuido. Por tanto, Aurora DSQL administra los cambios de esquema DDL como transacciones distribuidas.
En concreto, el comportamiento de DDL en Aurora DSQL es distinto según se indica a continuación:
- Errores de control de simultaneidad
-
Aurora DSQL devuelve un error de infracción de control de simultaneidad si ejecuta una transacción mientras otra transacción actualiza un recurso. Por ejemplo, considere la siguiente secuencia de acciones:
-
En la sesión 1, un usuario agrega una columna a la tabla
mytable
. -
En la sesión 2, un usuario intenta insertar una fila en
mytable
.Aurora DSQL devuelve el error
SQL Error [40001]: ERROR: schema has been updated by another transaction, please retry: (OC001).
-
- DDL y DML en la misma transacción
-
Las transacciones en Aurora DSQL pueden contener solo una instrucción DDL y no pueden tener tanto instrucciones DDL como DML. Esta restricción significa que no se puede crear una tabla e insertar datos en la misma tabla dentro de la misma transacción. Por ejemplo, Aurora DSQL admite las siguientes transacciones secuenciales.
BEGIN; CREATE TABLE mytable (ID_col integer); COMMIT; BEGIN; INSERT into FOO VALUES (1); COMMIT;
Aurora DSQL no admite la siguiente transacción, que incluye instrucciones
CREATE
eINSERT
.BEGIN; CREATE TABLE FOO (ID_col integer); INSERT into FOO VALUES (1); COMMIT;
- DDL asíncrono
-
En PostgreSQL estándar, operaciones DDL como
CREATE INDEX
bloquean la tabla afectada, por lo que no está disponible para lecturas y escrituras desde otras sesiones. En Aurora DSQL, estas instrucciones DDL se ejecutan de forma asíncrona mediante un administrador en segundo plano. El acceso a la tabla afectada no se bloquea. De este modo, las sentencias DDL en tablas de gran tamaño pueden ejecutarse sin tiempo de inactividad ni impacto en el rendimiento. Para obtener más información sobre el administrador de trabajos asíncronos en Aurora DSQL, consulte Índices asíncronos en Aurora DSQL.