DDL e transazioni distribuite in Aurora DSQL - Amazon Aurora DSQL

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

DDL e transazioni distribuite in Aurora DSQL

Il DDL (Data Definition Language) si comporta in modo diverso in Aurora DSQL rispetto a PostgreSQL. Aurora DSQL offre un livello di database Multi-AZ distribuito e senza condivisione basato su parchi di risorse di calcolo e archiviazione multi-tenant. Poiché non esiste un singolo nodo o leader del database primario, il catalogo del database viene distribuito. Pertanto, Aurora DSQL gestisce le modifiche DDL allo schema come transazioni distribuite.

In particolare, DDL si comporta in modo diverso in Aurora DSQL come segue:

Errori di controllo della concorrenza

Aurora DSQL restituisce un errore di violazione del controllo della concorrenza se si esegue una transazione mentre un’altra transazione aggiorna una risorsa. Considera, ad esempio, la seguente sequenza di azioni:

  1. Nella sessione 1, un utente aggiunge una colonna alla tabella mytable.

  2. Nella sessione 2, un utente tenta di inserire una riga in mytable.

    Aurora DSQL restituisce l’errore SQL Error [40001]: ERROR: schema has been updated by another transaction, please retry: (OC001).

DDL e DML nella stessa transazione

Le transazioni in Aurora DSQL possono contenere solo un’istruzione DDL e non possono avere sia istruzioni DDL che DML. Questa restrizione significa che non è possibile creare una tabella e inserire dati nella stessa tabella all’interno della stessa transazione. Ad esempio, Aurora DSQL supporta le seguenti transazioni sequenziali.

BEGIN; CREATE TABLE mytable (ID_col integer); COMMIT; BEGIN; INSERT into FOO VALUES (1); COMMIT;

Aurora DSQL non supporta la seguente transazione, che include contemporaneamente istruzioni CREATE e INSERT.

BEGIN; CREATE TABLE FOO (ID_col integer); INSERT into FOO VALUES (1); COMMIT;
DDL asincrono

In PostgreSQL standard, le operazioni DDL come CREATE INDEX bloccano la tabella interessata, rendendola non disponibile per le letture e le scritture da altre sessioni. In Aurora DSQL, queste istruzioni DDL vengono eseguite in modo asincrono utilizzando un gestore in background. L’accesso alla tabella interessata non è bloccato. Pertanto, istruzioni DDL su tabelle di grandi dimensioni possono esseri eseguito senza tempo di inattività o impatto sulle prestazioni. Per maggiori informazioni sull’utilizzo dello strumento di gestione dei processi asincroni in Aurora DSQL, consulta Indici asincroni in Aurora SQL.