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 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:

  1. Nella sessione 1, un utente aggiunge una colonna alla tabellamytable.

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

    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