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:
-
Nella sessione 1, un utente aggiunge una colonna alla tabella
mytable. -
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
CREATEeINSERT.BEGIN; CREATE TABLE FOO (ID_col integer); INSERT into FOO VALUES (1); COMMIT; - DDL asincrono
-
In PostgreSQL standard, le operazioni DDL come
CREATE INDEXbloccano 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.