

# Babelfish for Aurora PostgreSQL 작업 절차
<a name="Appendix.Babelfish.Functions"></a>

## 개요
<a name="Appendix.Babelfish.Functions.Overview"></a>

더 나은 쿼리 성능을 위해 Babelfish for Aurora PostgreSQL을 실행하는 Amazon RDS DB 인스턴스에 다음 프로시저를 사용할 수 있습니다.
+ [sp\$1babelfish\$1volatility](sp_babelfish_volatility.md)
+ [sp\$1execute\$1postgresql](sp_execute_postgresql.md)

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

PostgreSQL 함수 변동성은 최적화 프로그램이 특정 절의 일부에 사용될 때 쿼리 성능에 큰 영향을 미치는 더 나은 쿼리 실행을 할 수 있도록 지원합니다.

## 구문
<a name="sp_babelfish_volatility-syntax"></a>

 

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

## 인수
<a name="sp_babelfish_volatility-arguments"></a>

 *function\$1name(선택 사항)*   
두 부분으로 구성된 이름으로 이 인수의 값을 `schema_name.function_name`으로 지정하거나 `function_name`으로만 지정할 수 있습니다. `function_name`으로만 지정하는 경우 스키마 이름은 현재 사용자의 기본 스키마입니다.

 *volatility(선택 사항)*   
PostgreSQL의 유효한 변동성 값은 `stable`, `volatile` 또는 `immutable`입니다. 자세한 내용은 [https://www.postgresql.org/docs/current/xfunc-volatility.html](https://www.postgresql.org/docs/current/xfunc-volatility.html) 단원을 참조하세요.

**참고**  
`sp_babelfish_volatility`에서 여러 개의 정의를 가진 `function_name`을 호출하면 오류가 발생합니다.

## 결과 집합
<a name="sp_babelfish_volatility-return-type"></a>

파라미터가 언급되지 않은 경우 결과 집합이 `schemaname`, `functionname`, `volatility` 열 아래에 표시됩니다.

## 사용 노트
<a name="sp_babelfish_volatility-usage-notes"></a>

PostgreSQL 함수 변동성은 최적화 프로그램이 특정 절의 일부에 사용될 때 쿼리 성능에 큰 영향을 미치는 더 나은 쿼리 실행을 할 수 있도록 지원합니다.

## 예시
<a name="sp_babelfish_volatility-examples"></a>

다음 예에서는 간단한 함수를 만드는 방법을 보여 주고 나중에 다른 방법을 사용하여 이러한 함수에서 `sp_babelfish_volatility`를 사용하는 방법을 설명합니다.

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

다음 예제는 함수의 변동성을 표시합니다.

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

다음 예제는 함수의 변동성을 변경하는 방법을 보여줍니다.

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

function\$1name만 지정하면 해당 함수의 스키마 이름, 함수 이름 및 변동성이 표시됩니다. 다음 예제는 값을 변경한 후 함수의 변동성을 표시합니다.

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

인수를 지정하지 않으면 현재 데이터베이스에 있는 함수 목록(스키마 이름, 함수 이름, 함수 변동성)이 표시됩니다.

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

T-SQL 엔드포인트에서 PostgreSQL 문을 실행할 수 있습니다. 이렇게 하면 문을 실행하기 위해 T-SQL 포트를 종료할 필요가 없으므로 애플리케이션이 간소화됩니다.

## 구문
<a name="sp_execute_postgresql-syntax"></a>

 

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

## 인수
<a name="sp_execute_postgresql-arguments"></a>

 *[ @stmt ] 문*   
인수는 데이터 유형 varchar입니다. 이 인수는 PG 방언 문을 허용합니다.

**참고**  
하나의 PG 방언 문만 인수로 전달할 수 있습니다. 여러 개를 전달하면 다음 오류가 발생합니다.

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

## 사용 노트
<a name="sp_execute_postgresql-statements"></a>

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

새 확장을 만들어 현재 데이터베이스에 로드합니다.

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

다음 예시에서는 확장을 생성하는 방법을 보여줍니다.

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

다음 명령을 사용하여 확장 객체에 액세스합니다.

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

**참고**  
 확장 생성 시 스키마 이름을 명시적으로 제공하지 않으면 기본적으로 확장이 퍼블릭 스키마에 설치됩니다. 다음과 같이 확장 객체에 액세스하려면 스키마 한정자를 제공해야 합니다.

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

**지원되는 확장**

Aurora PostgreSQL에서 사용할 수 있는 다음 확장은 Babelfish와 호환됩니다.
+ `pg_stat_statements`
+ `tds_fdw`
+ `fuzzystrmatch`

**제한 사항**
+ 확장을 설치하려면 T-SQL에서는 sysadmin 역할이, postgres에서는 rds\$1superuser 역할이 있어야 합니다.
+ 확장은 사용자가 만든 스키마에는 설치할 수 없으며 마스터, tempdb 및 msdb 데이터베이스의 dbo 및 게스트 스키마에도 설치할 수 없습니다.
+ CASCADE 옵션은 지원되지 않습니다.

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

ALTER EXTENSION을 사용하여 새 확장 버전으로 업그레이드할 수 있습니다.

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

**제한 사항**
+ ALTER EXTENSION 문을 사용해서만 확장 버전을 업그레이드할 수 있습니다. 다른 작업은 지원되지 않습니다.

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

지정된 확장을 삭제합니다. `if exists` 또는 `restrict` 옵션을 사용하여 확장을 삭제할 수도 있습니다.

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

**제한 사항**
+ CASCADE 옵션은 지원되지 않습니다.