

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à.

# Confronto dei comportamenti delle API dati di Amazon RDS per i cluster Aurora Serverless v2 e con provisioning con i cluster Aurora Serverless v1
<a name="data-api.differences"></a>

I miglioramenti più recenti apportati alle API dati di Amazon RDS rendono le API dati disponibili per i cluster che utilizzano versioni recenti dei motori PostgreSQL o MySQL. Questi cluster possono essere configurati per utilizzare Aurora Serverless v2 oppure classi di istanza con provisioning, come `db.r6g` o `db.r6i`.

Le sezioni seguenti descrivono le differenze delle API dati di Amazon RDS tra cluster Aurora Serverless v2 e cluster di database con provisioning e cluster di database Aurora Serverless v1. Aurora Serverless v1 I cluster di database utilizzano la modalità motore `serverless`. I cluster di database con provisioning utilizzano la modalità motore `provisioned`. Un cluster di database Aurora Serverless v2 utilizza anch’esso la modalità motore `provisioned` e contiene una o più istanze database Aurora Serverless v2 con la classe di istanza `db.serverless`.

## Numero massimo di richieste al secondo
<a name="data-api.differences-requests"></a>

**Aurora Serverless v1**

Le API dati possono eseguire fino a 1.000 richieste al secondo.

**Aurora Serverless v2**

Le API dati possono eseguire un numero illimitato di richieste al secondo.

## Abilitazione o disabilitazione dell’API dati di Amazon RDS su un database esistente
<a name="data-api.differences-enable-disable"></a>

**Aurora Serverless v1**
+ **Con l’API Amazon RDS**: utilizza l’operazione `ModifyCluster` e specifica `True` o `False`, a seconda dei casi, per il parametro `EnableHttpEndpoint`.
+ **Con la AWS CLI**: utilizza l’operazione `modify-db-cluster` con l’opzione `--enable-http-endpoint` o `--no-enable-http-endpoint`, a seconda dei casi.

**Aurora Serverless v2**
+ **Con l’API Amazon RDS**: utilizza le operazioni `EnableHttpEndpoint` e `DisableHttpEndpoint`.
+ **Con la AWS CLI**: utilizza le operazioni `enable-http-endpoint` e `disable-http-endpoint`.

## Eventi CloudTrail
<a name="data-api.differences-ct-events"></a>

**Aurora Serverless v1**

Gli eventi derivanti dalle chiamate API dati sono eventi di gestione. Questi eventi vengono automaticamente inclusi in un trail per impostazione predefinita. Per ulteriori informazioni, consulta [Esclusione degli eventi Data API da un AWS CloudTrail trail (Aurora Serverless v1solo)](logging-using-cloudtrail-data-api.md#logging-using-cloudtrail-data-api.excluding-cloudtrail-events).

**Aurora Serverless v2**

Gli eventi derivanti dalle chiamate API dati sono eventi di dati. Questi eventi vengono automaticamente esclusi da un trail per impostazione predefinita. Per ulteriori informazioni, consulta [Inclusione degli eventi Data API in un AWS CloudTrail percorso](logging-using-cloudtrail-data-api.md#logging-using-cloudtrail-data-api.including-cloudtrail-events).

## Supporto per istruzioni multiple
<a name="data-api.differences-multistatement"></a>

**Aurora Serverless v1**
+ Per Aurora MySQL, le istruzioni multiple non sono supportate.
+ Per Aurora PostgreSQL, le istruzioni multiple restituiscono solo la risposta della prima query.

**Aurora Serverless v2**

Le istruzioni multiple non sono supportate. Il tentativo di eseguire più istruzioni in una singola chiamata API restituisce `“An error occurred (ValidationException) when calling the ExecuteStatement operation: Multistatements aren't supported.”`. Per eseguire più istruzioni, effettua chiamate API `ExecuteStatement` separate oppure utilizza `BatchExecuteStatement` per l’elaborazione in batch.

L’esempio seguente mostra il messaggio di errore risultante da una chiamata API che tenta di eseguire più istruzioni.

```
 aws rds-data execute-statement \    
    --resource-arn "arn:aws:rds:region:account:cluster:cluster-name" \    
    --secret-arn "arn:aws:secretsmanager:region:account:secret:secret-name" \    
    --database "your_database" \
    --sql "SELECT * FROM your_table; Select * FROM next_table;
                                
                                "An error occurred (ValidationException) when calling the ExecuteStatement operation: Multistatements aren't supported.
```

L’esempio seguente mostra l’esecuzione di più istruzioni tramite chiamate API `ExecuteStatement` separate.

```
aws rds-data execute-statement \
    --resource-arn "arn:aws:rds:region:account:cluster:cluster-name" \
    --secret-arn "arn:aws:secretsmanager:region:account:secret:secret-name" \
    --database "your_database" \
    --sql "SELECT * FROM your_table;"

aws rds-data execute-statement \
    --resource-arn "arn:aws:rds:region:account:cluster:cluster-name" \
    --secret-arn "arn:aws:secretsmanager:region:account:secret:secret-name" \
    --database "your_database" \
    --sql "SELECT * FROM next_table;"
```

## Richieste simultanee per lo stesso ID transazione
<a name="data-api.differences-concurrent-requests-transaction"></a>

**Aurora Serverless v1**

Le richieste successive attendono fino al completamento della richiesta corrente. L’applicazione deve gestire gli errori di timeout se il periodo di attesa è troppo lungo.

**Aurora Serverless v2**

Quando l’API dati riceve più richieste con lo stesso ID transazione, restituisce immediatamente questo errore:

`DatabaseErrorException: Transaction is still running a query`

Questo errore si verifica in due situazioni:
+ L’applicazione effettua richieste asincrone (ad esempio con promesse JavaScript) utilizzando lo stesso ID transazione.
+ Una richiesta precedente con tale ID transazione è ancora in elaborazione.

L’esempio seguente mostra tutte le richieste eseguite in parallelo con `promise.all()`.

```
const api_calls = [];
for (let i = 0; i < 10; i++) {
api_calls.push(
    client.send(
    new ExecuteStatementCommand({
        ...params,
        sql: `insert into table_name values (i);`,
        transactionId
    })
    )
);
}
await Promise.all(api_calls);
```

Per risolvere questo errore, attendi il completamento della richiesta corrente prima di inviare un’altra richiesta con lo stesso ID transazione o rimuovi l’ID transazione per consentire le richieste parallele.

L’esempio seguente mostra una chiamata API che utilizza l’esecuzione sequenziale con lo stesso ID transazione.

```
 for (let i = 0; i < 10; i++) {
    await client.send(
    new ExecuteStatementCommand({
        ...params,
        sql: `insert into table_name values (i);`,
        transactionId
    })
    ).promise()
);
}
```

## Comportamento di BatchExecuteStatement
<a name="data-api.differences-batchExecuteStatement"></a>

Per ulteriori informazioni su `BatchExecuteStatement`, consulta [BatchExecuteStatement](https://docs.aws.amazon.com/rdsdataservice/latest/APIReference/API_BatchExecuteStatement.html).

**Aurora Serverless v1**

L’oggetto dei campi generati nel risultato dell’aggiornamento include i valori inseriti.

**Aurora Serverless v2**
+ Per Aurora MySQL, l’oggetto campi generati nel risultato dell’aggiornamento include i valori inseriti.
+ Per Aurora PostgreSQL, l’oggetto campi generati è vuoto.

## Comportamento di ExecuteSQL
<a name="data-api.differences-ExecuteSQL"></a>

Per ulteriori informazioni su `ExecuteSQL`, consulta [ExecuteSQL](https://docs.aws.amazon.com/rdsdataservice/latest/APIReference/API_ExecuteSql.html).

**Aurora Serverless v1**

L’operazione `ExecuteSQL` è obsoleta.

**Aurora Serverless v2**

L’operazione `ExecuteSQL` non è supportata.

## Comportamento di ExecuteStatement
<a name="data-api.differences-ExecuteStatement"></a>

Per ulteriori informazioni su `ExecuteStatement`, consulta [ExecuteStatement](https://docs.aws.amazon.com/rdsdataservice/latest/APIReference/API_ExecuteStatement.html).

**Aurora Serverless v1**

Il parametro `ExecuteStatement` supporta lo strumento di recupero di colonne di array multidimensionali e di tutti i tipi di dati avanzati.

**Aurora Serverless v2**

Il parametro `ExecuteStatement` non supporta di colonne di array multidimensionali. Non supporta inoltre alcuni tipi di dati PostgreSQL, inclusi i tipi geometrici e monetari. Quando l’API dati rileva un tipo di dato non supportato, restituisce l’errore: `UnsupportedResultException: The result contains the unsupported data type data_type`.

Per risolvere il problema, esegui il casting del tipo di dati non supportato su `TEXT`. L’esempio seguente mostra come eseguire il casting di un tipo di dati non supportato su `TEXT`.

```
SELECT custom_type::TEXT FROM my_table;-- 
ORSELECT CAST(custom_type AS TEXT) FROM my_table;
```

Per un elenco dei tipi di dati supportati per ciascun motore di database Aurora, consulta il [riferimento alle operazioni dell’API dati](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/data-api.html#data-api-operations).

## Comportamento del parametro Schema
<a name="data-api.differences-schema-parameter"></a>

**Aurora Serverless v1**

Il parametro `Schema` non è supportato. Quando includi il parametro `Schema` in una chiamata API, l’API dati ignora il parametro.

**Aurora Serverless v2**

Il parametro `Schema` è obsoleto. Quando includi il parametro `Schema` in una chiamata API, l’API dati restituisce l’errore: `ValidationException: The schema parameter isn't supported`. L’esempio seguente mostra una chiamata API dati che restituisce l’errore `ValidationException`.

```
aws rds-data execute-statement \
--resource-arn "arn:aws:rds:region:account:cluster:cluster-name" \
--secret-arn "arn:aws:secretsmanager:region:account:secret:secret-name" \
--database "your_database" \
--schema "your_schema" \
--sql "SELECT * FROM your_table LIMIT 10"
```

Per risolvere questo problema, rimuovi il parametro `Schema` dalla chiamata API.

L’esempio seguente mostra una chiamata API dati con il parametro `Schema` rimosso.

```
aws rds-data execute-statement \   
--resource-arn "arn:aws:rds:region:account:cluster:cluster-name" \    
--secret-arn "arn:aws:secretsmanager:region:account:secret:secret-name" \    
--database "your_database" \    
--sql "SELECT * FROM your_table LIMIT 10"
```