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 Data Definition Language (DDL) si comporta in modo diverso in Aurora SQL rispetto a PostgreSQL. Aurora DSQL offre un livello di database Multi-AZ distribuito e senza condivisione basato su flotte di elaborazione e storage 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 allo schema DDL 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. Ad esempio, si consideri 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 entrambe le
CREATE
istruzioni.INSERT
BEGIN; CREATE TABLE FOO (ID_col integer); INSERT into FOO VALUES (1); COMMIT;
- DDL asincrono
-
In PostgreSQL standard, le operazioni DDL
CREATE INDEX
come 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, DDL su tabelle di grandi dimensioni può essere eseguito senza tempi di inattività o impatto sulle prestazioni. Per ulteriori informazioni sul job manager asincrono in Aurora DSQL, vedere. Indici asincroni in Aurora SQL