

# Trabalhar com o Babelfish para Aurora PostgreSQL
<a name="Appendix.Babelfish.Functions"></a>

## Visão geral
<a name="Appendix.Babelfish.Functions.Overview"></a>

Você pode usar o procedimento a seguir para instâncias de banco de dados do Amazon RDS que executam o Babelfish para Aurora PostgreSQL a fim de melhorar a performance de consultas:
+ [sp\$1babelfish\$1volatility](sp_babelfish_volatility.md)
+ [sp\$1execute\$1postgresql](sp_execute_postgresql.md)

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

A volatilidade da função do PostgreSQL ajuda o otimizador a melhorar a execução de consultas. Quando usada em partes de determinadas cláusulas, tem um impacto significativo na performance de consultas. 

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

 

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

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

 *function\$1name (opcional)*   
Você pode especificar o valor desse argumento como `schema_name.function_name`, com um nome de duas partes, ou somente `function_name`. Se você especificar somente `function_name`, o nome do esquema será o esquema padrão para o usuário atual.

 *volatility (opcional)*   
Os valores válidos de volatilidade do PostgreSQL são `stable`, `volatile` ou `immutable`. Para ter mais informações, consulte [https://www.postgresql.org/docs/current/xfunc-volatility.html](https://www.postgresql.org/docs/current/xfunc-volatility.html).

**nota**  
Quando `sp_babelfish_volatility` é chamado com `function_name`, que tem várias definições, será gerado um erro.

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

Se os parâmetros não forem mencionados, o conjunto de resultados será exibido nas seguintes colunas: `schemaname`, `functionname`, `volatility`.

## Observações de uso
<a name="sp_babelfish_volatility-usage-notes"></a>

A volatilidade da função do PostgreSQL ajuda o otimizador a melhorar a execução de consultas. Quando usada em partes de determinadas cláusulas, tem um impacto significativo na performance de consultas. 

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

Os exemplos a seguir mostram como criar funções simples e, posteriormente, explicam como usar `sp_babelfish_volatility` nessas funções utilizando métodos diferentes.

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

O exemplo a seguir mostra a volatilidade das funções:

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

O exemplo a seguir mostra como alterar a volatilidade das funções:

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

Quando você especifica somente function\$1name, são exibidos o nome do esquema, o nome da função e a volatilidade da função. O exemplo a seguir mostra a volatilidade das funções depois de alterar os 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
```

Quando você não especifica nenhum argumento, é exibida uma lista de funções (nome do esquema, nome da função, volatilidade das funções) presentes no banco de dados atual:

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

É possível executar instruções PostgreSQL do endpoint T-SQL. Isso simplifica suas aplicações, pois você não precisa sair da porta T-SQL para executar essas instruções. 

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

 

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

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

 *declaração [ @stmt ]*   
O argumento é um datatype varchar. Esse argumento aceita declarações do dialeto PG.

**nota**  
Você só pode passar uma declaração do dialeto PG como argumento; caso contrário, ela gerará o seguinte erro.

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

## Observações de uso
<a name="sp_execute_postgresql-statements"></a>

### CRIAR EXTENSÃO
<a name="sp_execute_postgresql-statements-create"></a>

Cria e carrega uma nova extensão no banco de dados atual. 

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

O exemplo a seguir mostra como criar uma extensão:

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

Use o comando a seguir para acessar objetos de extensão:

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

**nota**  
 Se o nome do esquema não for fornecido explicitamente durante a criação da extensão, por padrão, as extensões serão instaladas no esquema público. Você deve fornecer o qualificador de esquema para acessar os objetos de extensão, conforme mencionado abaixo:

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

**Extensões compatíveis**

As seguintes extensões disponíveis com o Aurora PostgreSQL funcionam com o Babelfish.
+ `pg_stat_statements`
+ `tds_fdw`
+ `fuzzystrmatch`

**Limitações**
+ Os usuários precisam ter a função sysadmin no T-SQL e rds\$1superuser no postgres para instalar as extensões.
+ As extensões não podem ser instaladas em esquemas criados pelo usuário e também em esquemas dbo e guest para bancos de dados master, tempdb e msdb. 
+ Não há compatibilidade para a opção CASCADE.

## ALTERAR EXTENSÃO
<a name="sp_execute_postgresql-alter"></a>

Você pode fazer a atualização para uma nova versão de extensão usando a extensão ALTER. 

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

**Limitações**
+ Só é possível fazer a atualização da versão da extensão usando a instrução ALTER Extension. Não há compatibilidade para outras operações.

## EXTENSÃO DROP
<a name="sp_execute_postgresql-drop"></a>

Elimina a extensão especificada. Você também pode usar as opções `if exists` ou `restrict` para remover a extensão. 

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

**Limitações**
+ Não há compatibilidade para a opção CASCADE.