

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
<a name="working-with-ddl"></a>

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:

**Risposte di controllo della concorrenza**  
Poiché il catalogo del database è distribuito, Aurora DSQL gestisce le modifiche allo schema DDL come transazioni distribuite che aggiornano la versione del catalogo. Le sessioni che dispongono di una copia cache del catalogo in una versione precedente possono ricevere una risposta di controllo della concorrenza con codice SQLSTATE `40001` e codice OCC alla successiva interazione con lo storage. `OC001`  
Considera, ad esempio, la seguente sequenza di azioni:  

1. Nella sessione 1, un utente aggiunge una colonna alla tabella `mytable`. Ciò aggiorna la versione del catalogo.

1. Nella sessione 2, un utente tenta di inserire una riga in `mytable`. In questa sessione la versione precedente del catalogo è ancora memorizzata nella cache.

   Aurora DSQL ritorna. `SQL Error [40001]: ERROR: schema has been updated by another transaction (OC001)`
Una OC001 risposta può verificarsi anche quando la modifica dello schema è già stata completata prima dell'inizio della transazione interessata. I processori di query Aurora DSQL rilevano le modifiche del catalogo in modo reattivo durante l'esecuzione delle query, quindi una sessione inattiva potrebbe ancora funzionare con una versione del catalogo non aggiornata. Al nuovo tentativo, la sessione aggiorna la cache del catalogo e la transazione in genere ha esito positivo.

**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](working-with-create-index-async.md).