

# Comparación de los comportamientos de la API de datos de Amazon RDS para clústeres de Aurora Serverless v2 y aprovisionados con clústeres de Aurora Serverless v1
<a name="data-api.differences"></a>

Las mejoras más recientes de las API de datos de Amazon RDS permiten que las API de datos estén disponibles para los clústeres que utilizan versiones recientes de los motores de PostgreSQL o MySQL. Estos clústeres se pueden configurar para el uso de Aurora Serverless v2 o de clases de instancias aprovisionadas, como `db.r6g` o `db.r6i`.

Las secciones siguientes describen las diferencias de la API de datos de Amazon RDS entre clústeres de bases de datos de Aurora Serverless v2 y aprovisionados y los clústeres de bases de datos de Aurora Serverless v1. Aurora Serverless v1 Los clústeres de bases de datos utilizan el modo de motor `serverless`. Los clústeres de bases de datos aprovisionados utilizan el modo de motor `provisioned`. Un clúster de base de datos de Aurora Serverless v2 también utiliza el modo de motor `provisioned` y contiene una o más instancias de base de datos de Aurora Serverless v2 con la clase de instancia `db.serverless`.

## Número máximo de solicitudes por segundo
<a name="data-api.differences-requests"></a>

**Aurora Serverless v1**

Las API de datos pueden realizar hasta 1000 solicitudes por segundo.

**Aurora Serverless v2**

Las API de datos pueden realizar un número ilimitado de solicitudes por segundo.

## Habilitación o desactivación de la API de datos de Amazon RDS en una base de datos existente
<a name="data-api.differences-enable-disable"></a>

**Aurora Serverless v1**
+ **Con la API de Amazon RDS**: use la operación `ModifyCluster` y especifique `True` o `False`, según proceda, para el parámetro `EnableHttpEndpoint`.
+ **Con la AWS CLI**: use la operación `modify-db-cluster` con la opción `--enable-http-endpoint` o `--no-enable-http-endpoint`, según proceda.

**Aurora Serverless v2**
+ **Con la API de Amazon RDS**: utilice las operaciones `EnableHttpEndpoint` y `DisableHttpEndpoint`.
+ **Con la AWS CLI**: utilice las operaciones `enable-http-endpoint` y `disable-http-endpoint`.

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

**Aurora Serverless v1**

Los eventos de las llamadas a la API de datos son eventos de administración. De forma predeterminada, estos eventos se incluyen automáticamente de un registro. Para obtener más información, consulte [Excluir eventos de la API de datos de un seguimiento de AWS CloudTrail (solo Aurora Serverless v1)](logging-using-cloudtrail-data-api.md#logging-using-cloudtrail-data-api.excluding-cloudtrail-events).

**Aurora Serverless v2**

Los eventos de las llamadas a la API de datos son eventos de datos. De forma predeterminada, estos eventos se excluyen automáticamente de un registro. Para obtener más información, consulte [Inclusión de eventos de la API de datos en un seguimiento de AWS CloudTrail](logging-using-cloudtrail-data-api.md#logging-using-cloudtrail-data-api.including-cloudtrail-events).

## Compatibilidad con instrucciones múltiples
<a name="data-api.differences-multistatement"></a>

**Aurora Serverless v1**
+ Aurora MySQL no admite las instrucciones múltiples.
+ Para Aurora PostgreSQL, las instrucciones múltiples devuelven solo la primera respuesta a la consulta.

**Aurora Serverless v2**

Las instrucciones múltiples no son compatibles. Intentar ejecutar varias instrucciones en una sola llamada a la API devuelve `“An error occurred (ValidationException) when calling the ExecuteStatement operation: Multistatements aren't supported.”`. Para ejecutar varias instrucciones, realice llamadas a la API `ExecuteStatement` independientes o utilice `BatchExecuteStatement` para el procesamiento por lotes.

El siguiente ejemplo muestra el mensaje de error resultante de una llamada a la API que intenta ejecutar una instrucción múltiple.

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

El siguiente ejemplo ejecuta varias instrucciones con llamadas a la API `ExecuteStatement` independientes.

```
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;"
```

## Solicitudes simultáneas para el mismo ID de transacción
<a name="data-api.differences-concurrent-requests-transaction"></a>

**Aurora Serverless v1**

Las solicitudes subsiguientes esperan hasta que finalice la solicitud actual. Su aplicación debe gestionar los errores de tiempo de espera si el período de espera es demasiado largo.

**Aurora Serverless v2**

Cuando la API de datos recibe varias solicitudes con el mismo ID de transacción, devuelve inmediatamente este error:

`DatabaseErrorException: Transaction is still running a query`

Este error se produce en dos situaciones:
+ La aplicación realiza solicitudes asíncronas (como las promesas de JavaScript) con el mismo ID de transacción.
+ Aún se está procesando una solicitud anterior con ese ID de transacción.

El siguiente ejemplo muestra todas las solicitudes ejecutadas en paralelo 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);
```

Para resolver este error, espere a que finalice la solicitud actual antes de enviar otra solicitud con el mismo ID de transacción o elimine el ID de transacción para permitir las solicitudes en paralelo.

El siguiente ejemplo muestra una llamada a la API que utiliza la ejecución secuencial con el mismo ID de transacción.

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

## Comportamiento de BatchExecuteStatement
<a name="data-api.differences-batchExecuteStatement"></a>

Para obtener más información acerca de `BatchExecuteStatement`, consulte [BatchExecuteStatement](https://docs.aws.amazon.com/rdsdataservice/latest/APIReference/API_BatchExecuteStatement.html).

**Aurora Serverless v1**

El objeto de campos generado en el resultado de la actualización incluye los valores insertados.

**Aurora Serverless v2**
+ Para Aurora MySQL, el objeto de campos generado en el resultado de la actualización incluye los valores insertados.
+ En Aurora PostgreSQL, el objeto de campos generado está vacío.

## Comportamiento de ExecuteSQL
<a name="data-api.differences-ExecuteSQL"></a>

Para obtener más información acerca de `ExecuteSQL`, consulte [ExecuteSQL](https://docs.aws.amazon.com/rdsdataservice/latest/APIReference/API_ExecuteSql.html).

**Aurora Serverless v1**

La operación `ExecuteSQL` no está disponible.

**Aurora Serverless v2**

La operación `ExecuteSQL` no es compatible.

## Comportamiento de ExecuteStatement
<a name="data-api.differences-ExecuteStatement"></a>

Para obtener más información acerca de `ExecuteStatement`, consulte [ExecuteStatement](https://docs.aws.amazon.com/rdsdataservice/latest/APIReference/API_ExecuteStatement.html).

**Aurora Serverless v1**

El parámetro `ExecuteStatement` admite la recuperación de columnas de matrices multidimensionales y todos los tipos de datos avanzados.

**Aurora Serverless v2**

El parámetro `ExecuteStatement` no admite columnas de matrices multidimensionales. Tampoco admite determinados tipos de datos de PostgreSQL, incluidos los tipos geométricos y monetarios. Cuando una API de datos encuentra un tipo de datos no compatible, devuelve este error: `UnsupportedResultException: The result contains the unsupported data type data_type`.

Para evitar este problema, convierta el tipo de datos no compatible a `TEXT`. El siguiente ejemplo convierte un tipo de datos no compatible en `TEXT`.

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

Para obtener una lista de los tipos de datos admitidos para cada motor de base de datos de Aurora, consulte [Referencia de operaciones de la API de datos](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/data-api.html#data-api-operations).

## Comportamiento del parámetro de esquema
<a name="data-api.differences-schema-parameter"></a>

**Aurora Serverless v1**

El parámetro `Schema` no es compatible. Cuando incluye el parámetro `Schema` en una llamada a la API, la API de datos lo ignora.

**Aurora Serverless v2**

El parámetro `Schema` no está disponible. Cuando incluye el parámetro `Schema` en una llamada a la API, la API de datos devuelve este error: `ValidationException: The schema parameter isn't supported`. El siguiente ejemplo muestra una llamada a la API de datos que devuelve el error `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"
```

Para solucionar este problema, elimine el parámetro `Schema` de la llamada a la API.

El siguiente ejemplo muestra una llamada a la API de datos con el parámetro `Schema` eliminado.

```
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"
```