

# Uso de los procedimientos de Babelfish para Aurora PostgreSQL
<a name="Appendix.Babelfish.Functions"></a>

## Información general
<a name="Appendix.Babelfish.Functions.Overview"></a>

Puede utilizar el siguiente procedimiento para las instancias de base de datos de Amazon RDS que ejecuten Babelfish para Aurora PostgreSQL para obtener un mejor rendimiento de las consultas:
+ [sp\$1babelfish\$1volatility](sp_babelfish_volatility.md)
+ [sp\$1execute\$1postgresql](sp_execute_postgresql.md)

# sp\$1babelfish\$1volatility
<a name="sp_babelfish_volatility"></a>

La volatilidad de las funciones de PostgreSQL ayuda al optimizador a ejecutar mejor las consultas, lo que, cuando se usa en partes de determinadas cláusulas, tiene un impacto significativo en el rendimiento de las consultas. 

## Sintaxis
<a name="sp_babelfish_volatility-syntax"></a>

 

```
sp_babelfish_volatility ‘function_name’, ‘volatility’
```

## Argumentos
<a name="sp_babelfish_volatility-arguments"></a>

 *function\$1name (opcional)*   
Puede especificar el valor de este argumento con un nombre de dos partes como `schema_name.function_name` o solo el `function_name`. Si especifica solo el `function_name`, el nombre del esquema será el esquema predeterminado para el usuario actual.

 *volatility (optional)*   
Los valores de volatilidad válidos de PostgreSQL son `stable`, `volatile` o `immutable`. Para obtener más información, consulte [https://www.postgresql.org/docs/current/xfunc-volatility.html](https://www.postgresql.org/docs/current/xfunc-volatility.html)

**nota**  
Cuando `sp_babelfish_volatility` se llama con un `function_name` con múltiples definiciones, arrojará un error.

## Conjuntos de resultados
<a name="sp_babelfish_volatility-return-type"></a>

Si no se mencionan los parámetros, el conjunto de resultados se muestra en las siguientes columnas: `schemaname`, `functionname`, `volatility`.

## Notas de uso
<a name="sp_babelfish_volatility-usage-notes"></a>

La volatilidad de las funciones de PostgreSQL ayuda al optimizador a ejecutar mejor las consultas, lo que, cuando se usa en partes de determinadas cláusulas, tiene un impacto significativo en el rendimiento de las consultas. 

## Ejemplos
<a name="sp_babelfish_volatility-examples"></a>

En los siguientes ejemplos se muestra cómo crear funciones simples y, posteriormente, se explica cómo utilizar `sp_babelfish_volatility` en estas funciones mediante diferentes métodos.

```
1> create function f1() returns int as begin return 0 end
2> go
```

```
1> create schema test_schema
2> go
```

```
1> create function test_schema.f1() returns int as begin return 0 end
2> go
```

El siguiente ejemplo muestra la volatilidad de las funciones:

```
1> exec sp_babelfish_volatility
2> go
            
schemaname  functionname volatility
----------- ------------ ----------
dbo         f1           volatile
test_schema f1           volatile
```

El siguiente ejemplo muestra cómo cambiar la volatilidad de las funciones:

```
1> exec sp_babelfish_volatility 'f1','stable'
2> go
1> exec sp_babelfish_volatility 'test_schema.f1','immutable'
2> go
```

Al especificar solo el function\$1name, se muestran el nombre del esquema, el nombre de la función y la volatilidad de esa función. El siguiente ejemplo muestra la volatilidad de las funciones después de cambiar los valores:

```
1> exec sp_babelfish_volatility 'test_schema.f1'
2> go
            
schemaname  functionname volatility
----------- ------------ ----------
test_schema f1           immutable
```

```
1> exec sp_babelfish_volatility 'f1'
2> go
            
schemaname  functionname volatility
----------- ------------ ----------
dbo         f1           stable
```

Si no especifica ningún argumento, se muestra una lista de funciones (nombre del esquema, nombre de la función, volatilidad de las funciones) presentes en la base de datos actual:

```
1> exec sp_babelfish_volatility 
2> go
            
schemaname  functionname volatility
----------- ------------ ----------
dbo         f1           stable
test_schema f1           immutable
```

# sp\$1execute\$1postgresql
<a name="sp_execute_postgresql"></a>

Puede ejecutar instrucciones PostgreSQL desde el punto de conexión de T-SQL. Así se simplifican las aplicaciones, ya que no es necesario salir del puerto T-SQL para ejecutar las instrucciones. 

## Sintaxis
<a name="sp_execute_postgresql-syntax"></a>

 

```
sp_execute_postgresql [ @stmt = ] statement
```

## Argumentos
<a name="sp_execute_postgresql-arguments"></a>

 *Instrucción [@stmt]*   
El argumento es de tipo varchar. Este argumento acepta instrucciones del dialecto PG.

**nota**  
Como argumento solo puede especificarse una instrucción del dialecto PG; de lo contrario, se generará el error siguiente:

```
1>exec sp_execute_postgresql 'create extension pg_stat_statements; drop extension pg_stat_statements'
2>go
```

```
Msg 33557097, Level 16, State 1, Server BABELFISH, Line 1
expected 1 statement but got 2 statements after parsing
```

## Notas de uso
<a name="sp_execute_postgresql-statements"></a>

### CREATE EXTENSION
<a name="sp_execute_postgresql-statements-create"></a>

Crea y carga una nueva extensión en la base de datos actual. 

```
1>EXEC sp_execute_postgresql 'create extension [ IF NOT EXISTS ] <extension name> [ WITH ] [SCHEMA schema_name] [VERSION version]';
2>go
```

En el ejemplo siguiente se muestra cómo crear una extensión:

```
1>EXEC sp_execute_postgresql 'create extension pg_stat_statements with schema sys version "1.10"';
2>go
```

Utilice el comando siguiente para obtener acceso a objetos de extensión:

```
1>select * from pg_stat_statements;
2>go
```

**nota**  
 Si el nombre del esquema no se proporciona de forma explícita cuando se crea la extensión, las extensiones se instalan de forma predeterminada en el esquema público. Debe proporcionar el calificador de esquema para tener acceso a los objetos de la extensión, como se indica a continuación:

```
1>select * from [public].pg_stat_statements;
2>go
```

**Extensiones compatibles**

Las siguientes extensiones disponibles con Aurora PostgreSQL funcionan con Babelfish.
+ `pg_stat_statements`
+ `tds_fdw`
+ `fuzzystrmatch`

**Limitaciones**
+ Los usuarios deben tener el rol sysadmin en T-SQL y rds\$1superuser en postgres para instalar las extensiones.
+ Las extensiones no se pueden instalar en los esquemas creados por el usuario ni tampoco en los esquemas dbo y guest de las bases de datos master, tempdb y msdb. 
+ La opción CASCADE no es compatible.

## ALTER EXTENSION
<a name="sp_execute_postgresql-alter"></a>

Puede actualizar a una nueva versión de la extensión utilizando ALTER EXTENSION. 

```
1>EXEC sp_execute_postgresql 'alter extension <extension name> UPDATE TO <new_version>';
2>go
```

**Limitaciones**
+ La versión de la extensión solamente se puede actualizar con la instrucción ALTER EXTENSION. No se admiten otras operaciones.

## DROP EXTENSION
<a name="sp_execute_postgresql-drop"></a>

Elimina la extensión especificada. También puede usar las opciones `if exists` o `restrict` para eliminar la extensión. 

```
1>EXEC sp_execute_postgresql 'drop extension <extension name>';
2>go
```

**Limitaciones**
+ La opción CASCADE no es compatible.