

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 를 사용하여 SQL Server에서 PostgreSQL로 마이그레이션 AWS Schema Conversion Tool
<a name="CHAP_Source.SQLServer.ToPostgreSQL"></a>

 AWS SCT에서는 SQL Server에서 PostgreSQL로의 확장 팩을 사용할 수 있습니다. 이 확장 팩은 변환된 PostgreSQL 코드에서 SQL Server 데이터베이스 함수를 에뮬레이션합니다. SQL Server에서 PostgreSQL로의 확장 팩을 사용하여 SQL Server 에이전트 및 SQL Server Database Mail을 에뮬레이션할 수 있습니다. 확장 팩에 대한 자세한 내용은 [에서 확장 팩 사용 AWS Schema Conversion Tool](CHAP_ExtensionPack.md) 섹션을 참조하세요.

**Topics**
+ [PostgreSQL을 대상 데이터베이스로 사용하기 위한 권한](#CHAP_Source.SQLServer.ToPostgreSQL.ConfigurePostgreSQL)
+ [SQL Server에서 PostgreSQL로 변환 설정](#CHAP_Source.SQLServer.ToPostgreSQL.ConversionSettings)
+ [SQL Server 파티션을 PostgreSQL 버전 10 파티션으로 변환](#CHAP_Source.SQLServer.ToPostgreSQL.PG10Partitions)
+ [마이그레이션 고려 사항](#CHAP_Source.SQLServer.ToPostgreSQL.MigrationConsiderations)
+ [AWS SCT 확장 팩을 사용하여 PostgreSQL에서 SQL Server 에이전트 에뮬레이션](CHAP_Source.SQLServer.ToPostgreSQL.ExtensionPack.Agent.md)
+ [AWS SCT 확장 팩을 사용하여 PostgreSQL에서 SQL Server Database Mail 에뮬레이션](CHAP_Source.SQLServer.ToPostgreSQL.ExtensionPack.Mail.md)

## PostgreSQL을 대상 데이터베이스로 사용하기 위한 권한
<a name="CHAP_Source.SQLServer.ToPostgreSQL.ConfigurePostgreSQL"></a>

PostgreSQL을 대상으로 사용하려면 `CREATE ON DATABASE`에 권한이 AWS SCT 필요합니다. 각 대상 PostgreSQL 데이터베이스에 대해 이 권한을 부여해야 합니다.

변환된 공개 동의어를 사용하려면 데이터베이스 기본 검색 경로를 `"$user", public_synonyms, public`으로 변경합니다.

다음 코드 예제를 사용하여 데이터베이스 사용자를 생성하고 권한을 부여할 수 있습니다.

```
CREATE ROLE user_name LOGIN PASSWORD 'your_password';
GRANT CREATE ON DATABASE db_name TO user_name;
ALTER DATABASE db_name SET SEARCH_PATH = "$user", public_synonyms, public;
```

이전 예제에서 *user\$1name*을 사용자 이름으로 바꿉니다. 그런 다음 *db\$1name*을 대상 데이터베이스의 이름으로 바꿉니다. 마지막으로 *your\$1password*를 안전한 암호로 바꿉니다.

PostgreSQL에서는 스키마 소유자 또는 `superuser`만 스키마를 삭제할 수 있습니다. 소유자는 스키마 소유자가 일부 객체를 소유하지 않은 경우에도 스키마 및 이 스키마에 포함된 모든 객체를 삭제할 수 있습니다.

다른 사용자를 사용하여 대상 데이터베이스에 다른 스키마를 변환하고 적용하는 경우에서 스키마를 삭제할 수 없는 경우 오류 메시지가 표시될 AWS SCT 수 있습니다. 이 오류 메시지가 표시되지 않도록 하려면 `superuser` 역할을 사용하세요.

## SQL Server에서 PostgreSQL로 변환 설정
<a name="CHAP_Source.SQLServer.ToPostgreSQL.ConversionSettings"></a>

SQL Server에서 PostgreSQL로의 변환 설정을 편집하려면 **설정**을 선택한 다음 **변환 설정**을 선택합니다. 상단 목록에서 **SQL Server**를 선택한 다음 **SQL Server – PostgreSQL**을 선택합니다. AWS SCT 는 SQL Server에서 PostgreSQL로의 변환에 사용할 수 있는 모든 설정을 표시합니다.

의 SQL Server에서 PostgreSQL로의 변환 설정에는 다음에 대한 옵션이 AWS SCT 포함됩니다.
+ 변환된 코드에서 작업 항목이 포함된 설명의 수를 제한합니다.

  **선택한 심각도 이상의 작업 항목에 대해 변환된 코드에 주석 추가에서** 작업 항목의 심각도를 선택합니다.는 선택한 심각도 이상의 작업 항목에 대해 변환된 코드에 주석을 AWS SCT 추가합니다.

  예를 들어, 변환된 코드의 설명 수를 최소화하려면 **오류만**을 선택하세요. 변환된 코드의 모든 작업 항목에 대한 설명을 포함하려면 **모든 메시지**를 선택합니다.
+ SQL Server의 여러 테이블에서 이름이 같은 인덱스를 사용할 수 있도록 합니다.

  PostgreSQL에서는 스키마에서 사용하는 모든 인덱스 이름이 고유해야 합니다. 가 모든 인덱스에 대해 고유한 이름을 AWS SCT 생성하도록 하려면 **인덱스에 대해 고유한 이름 생성을** 선택합니다.
+ SQL Server 프로시저를 PostgreSQL 함수로 변환합니다.

  PostgreSQL 버전 10 이하에서는 프로시저를 지원하지 않습니다. PostgreSQL에서 프로시저를 사용하는 데 익숙하지 않은 고객의 경우 프로시저를 함수로 변환할 AWS SCT 수 있습니다. 이렇게 하려면 **프로시저를 함수로 변환**을 선택합니다.
+ 테이블에서 `EXEC` 출력을 에뮬레이션하려면

  소스 SQL Server 데이터베이스는 `EXEC`의 출력을 테이블에 저장할 수 있습니다. AWS SCT 는 임시 테이블과 추가 프로시저를 생성하여 이 기능을 에뮬레이션합니다. 이 에뮬레이션을 사용하려면 **Create additional routines for handling open datasets**를 선택합니다.
+ 변환된 코드의 스키마 이름에 사용할 템플릿을 정의합니다. **Schema name generation template**에서 다음 옵션 중 하나를 선택합니다.
  + **<source\$1db>** – PostgreSQL에서 SQL Server 데이터베이스 이름을 스키마 이름으로 사용합니다.
  + **<source\$1schema>** – PostgreSQL에서 SQL Server 스키마 이름을 스키마 이름으로 사용합니다.
  + **<source\$1db>\$1<schema>** – PostgreSQL에서 SQL Server 데이터베이스와 스키마 이름의 조합을 스키마 이름으로 사용합니다.
+ 소스 객체 이름의 대소문자를 그대로 사용합니다.

  객체 이름을 소문자로 변환하지 않으려면 **Avoid casting to lower case for case sensitive operations**를 선택합니다. 이 옵션은 대상 데이터베이스에서 대소문자 구분 옵션을 활성화한 경우에만 적용됩니다.
+ 소스 데이터베이스의 파라미터 이름을 유지합니다.

  변환된 코드의 파라미터 이름에 큰따옴표를 추가하려면 **원본 파라미터 이름 유지**를 선택합니다.

## SQL Server 파티션을 PostgreSQL 버전 10 파티션으로 변환
<a name="CHAP_Source.SQLServer.ToPostgreSQL.PG10Partitions"></a>

Microsoft SQL Server 데이터베이스를 Amazon Aurora PostgreSQL-Compatible Edition(Aurora PostgreSQL) 또는 Amazon Relational Database Service for PostgreSQL(Amazon RDS for PostgreSQL)로 변환할 때는 다음 사항에 유의합니다.

SQL Server에서는 파티션 함수를 사용하여 파티션을 생성합니다. SQL Server 파티션 테이블을 PostgreSQL 버전 10 파티션 테이블로 변환할 때는 다음과 같은 몇 가지 잠재적 문제에 유의해야 합니다.
+ SQL Server에서는 NOT NULL 제약 조건 없이 열을 사용하여 테이블을 분할할 수 있습니다. 이 경우 모든 NULL 값은 맨 왼쪽 파티션으로 이동합니다. PostgreSQL은 RANGE 파티셔닝에서 NULL 값을 지원하지 않습니다.
+ SQL Server에서는 파티션 테이블의 프라이머리 키와 고유 키를 만들 수 있습니다. PostgreSQL에서는 각 파티션의 프라이머리 키 또는 고유 키를 직접 생성할 수 있습니다. 따라서 PostgreSQL로 마이그레이션할 때 PRIMARY 또는 UNIQUE KEY 제약 조건을 상위 테이블에서 제거해야 합니다. 결과 키 이름은 `<original_key_name>_<partition_number>` 형식입니다.
+ SQL Server를 사용하면 파티션 테이블에서 또는 파티션 테이블에 외래 키 제약 조건을 만들 수 있습니다. PostgreSQL은 파티션 테이블을 참조하는 외래 키를 지원하지 않습니다. 또한 PostgreSQL은 파티션 테이블에서 다른 테이블로의 외래 키 참조를 지원하지 않습니다.
+ SQL Server를 사용하면 파티션 테이블의 인덱스를 만들 수 있습니다. PostgreSQL에서는 각 파티션에 대해 직접 인덱스를 생성해야 합니다. 따라서 PostgreSQL로 마이그레이션할 때 해당 인덱스를 상위 테이블에서 제거해야 합니다. 결과 인덱스 이름은 `<original_index_name>_<partition_number>` 형식입니다.
+  PostgreSQL은 파티션된 인덱스를 지원하지 않습니다.

## 마이그레이션 고려 사항
<a name="CHAP_Source.SQLServer.ToPostgreSQL.MigrationConsiderations"></a>

SQL Server 스키마에서 PostgreSQL로 마이그레이션할 때 고려해야 할 사항: 
+ PostgreSQL에서는 스키마의 모든 객체 이름(인덱스 포함)이 고유해야 합니다. 인덱스 이름은 기본 테이블의 스키마에서 고유해야 합니다. SQL Server에서는 서로 다른 테이블에서 인덱스 이름이 동일할 수 있습니다.

  인덱스 이름의 고유성을 보장하기 위해는 인덱스 이름이 고유하지 않은 경우 고유한 인덱스 이름을 생성할 수 있는 옵션을 AWS SCT 제공합니다. 이렇게 하려면 프로젝트 속성에서 **Generate unique index names(고유한 인덱스 이름 생성)** 옵션을 선택합니다. 이 옵션은 기본적으로 활성화되어 있습니다. 이 옵션을 활성화하면 IX\$1table\$1name\$1index\$1name 형식을 사용하여 고유한 인덱스 이름이 생성됩니다. 이 옵션을 비활성화하면 인덱스 이름이 변경되지 않습니다.
+ GOTO 문과 레이블을 사용하여 문 실행 순서를 변경할 수 있습니다. GOTO 문 뒤에 오는 Transact-SQL 문은 건너뛰며 프로세스는 레이블에서 계속됩니다. GOTO 문과 레이블은 프로시저, 배치(batch), 문 블록 내 어디든 사용할 수 있습니다. GOTO 문은 중첩될 수 있습니다.

  PostgreSQL은 GOTO 명령문을 사용하지 않습니다. 가 GOTO 문이 포함된 코드를 AWS SCT 변환할 때 BEGIN...END 또는 LOOP...END LOOP 문을 사용하도록 문을 변환합니다. 다음 표에서가 GOTO 문을 AWS SCT 변환하는 방법의 예를 찾을 수 있습니다.  
**SQL Server GOTO 문 및 변환된 PostgreSQL 문**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/SchemaConversionTool/latest/userguide/CHAP_Source.SQLServer.ToPostgreSQL.html)
+ PostgreSQL은 MERGE 문을 지원하지 않습니다.는 다음과 같은 방식으로 MERGE 문의 동작을에 AWS SCT 뮬레이션합니다.
  + INSERT ON CONFLICT 생성.
  + UPDATE FROM DML 문 사용(예: MERGE without a WHEN NOT MATCHED 절)
  + CURSOR 사용(예: MERGE with DELETE 절) 또는 복잡한 MERGE ON 조건문 사용
+ AWS SCT 는 Amazon RDS가 대상일 때 객체 트리에 데이터베이스 트리거를 추가할 수 있습니다.
+ AWS SCT 는 Amazon RDS가 대상일 때 객체 트리에 서버 수준 트리거를 추가할 수 있습니다.
+ SQL Server는 `deleted` 및 `inserted` 테이블을 자동으로 생성하고 관리합니다. 이러한 임시 메모리 상주 테이블을 사용하여 특정 데이터 수정의 영향을 테스트하고 DML 트리거 작업에 대한 조건을 설정할 수 있습니다.는 DML 트리거 문 내에서 이러한 테이블의 사용을 변환할 AWS SCT 수 있습니다.
+ AWS SCT Amazon RDS가 대상인 경우는 연결된 서버를 객체 트리에 추가할 수 있습니다.
+ Microsoft SQL Server에서 PostgreSQL로 마이그레이션하면 내장된 SUSER\$1SNAME 함수가 다음과 같이 변환됩니다.
  + SUSER\$1SNAME - 보안 식별 번호(SID)와 연결된 로그인 이름을 반환합니다.
  + SUSER\$1SNAME(<server\$1user\$1sid>) – 지원되지 않습니다.
  + SUSER\$1SNAME() CURRENT\$1USER – 현재 실행 컨텍스트의 사용자 이름을 반환합니다.
  + SUSER\$1SNAME(NULL) – NULL을 반환합니다.
+ 테이블 반환 함수 변환이 지원됩니다. 테이블 반환 함수는 테이블을 반환하며 쿼리에서 테이블을 대신할 수 있습니다.
+ PATINDEX에서는 유효한 모든 텍스트 및 문자 데이터 형식의 지정된 표현식에서 패턴이 처음으로 발생하는 시작 위치를 반환하고, 패턴을 찾을 수 없는 경우 0을 반환합니다. SQL Server에서 Amazon RDS for PostgreSQL로 변환할 때는 PATINDEX를 aws\$1sqlserver\$1ext.patindex(<패턴 문자>, <표현 문자 변형>)와 함께 사용하는 애플리케이션 코드를 AWS SCT 대체합니다.
+ SQL Server에서 사용자 정의 테이블 유형은 테이블 구조의 정의를 나타내는 유형입니다. 사용자 정의 테이블 유형을 사용하여 저장 프로시저 또는 함수에 테이블-값 파라미터를 선언합니다. 또한 사용자 정의 테이블 유형을 사용하여 저장 프로시저 또는 함수의 배치 또는 본문에 사용할 테이블 변수를 선언할 수 있습니다. 임시 테이블을 생성하여 PostgreSQL에서이 유형을에 AWS SCT 뮬레이션했습니다.

SQL Server에서 PostgreSQL로 변환할 때는 SQL Server 시스템 객체를 PostgreSQL에서 인식 가능한 객체로 AWS SCT 변환합니다. 다음 표에서는 시스템 객체가 어떻게 변환되는지 보여줍니다.

 


| MS SQL Server 사용 사례 | PostgreSQL 대체 | 
| --- | --- | 
| SYS.SCHEMAS | AWS\$1SQLSERVER\$1EXT.SYS\$1SCHEMAS | 
| SYS.TABLES | AWS\$1SQLSERVER\$1EXT.SYS\$1TABLES | 
| SYS.VIEWS | AWS\$1SQLSERVER\$1EXT.SYS\$1VIEWS | 
| SYS.ALL\$1VIEWS | AWS\$1SQLSERVER\$1EXT.SYS\$1ALL\$1VIEWS | 
| SYS.TYPES | AWS\$1SQLSERVER\$1EXT.SYS\$1TYPES | 
| SYS.COLUMNS | AWS\$1SQLSERVER\$1EXT.SYS\$1COLUMNS | 
| SYS.ALL\$1COLUMNS | AWS\$1SQLSERVER\$1EXT.SYS\$1ALL\$1COLUMNS | 
| SYS.FOREIGN\$1KEYS | AWS\$1SQLSERVER\$1EXT.SYS\$1FOREIGN\$1KEYS | 
| SYS.SYSFOREIGNKEYS | AWS\$1SQLSERVER\$1EXT.SYS\$1SYSFOREIGNKEYS | 
| SYS.FOREIGN\$1KEY\$1COLUMNS | AWS\$1SQLSERVER\$1EXT.SYS\$1FOREIGN\$1KEY\$1COLUMNS | 
| SYS.KEY\$1CONSTRAINTS | AWS\$1SQLSERVER\$1EXT.SYS\$1KEY\$1CONSTRAINTS | 
| SYS.IDENTITY\$1COLUMNS | AWS\$1SQLSERVER\$1EXT.SYS\$1IDENTITY\$1COLUMNS | 
| SYS.PROCEDURES | AWS\$1SQLSERVER\$1EXT.SYS\$1PROCEDURES | 
| SYS.INDEXES | AWS\$1SQLSERVER\$1EXT.SYS\$1INDEXES | 
| SYS.SYSINDEXES | AWS\$1SQLSERVER\$1EXT.SYS\$1SYSINDEXES | 
| SYS.OBJECTS | AWS\$1SQLSERVER\$1EXT.SYS\$1OBJECTS | 
| SYS.ALL\$1OBJECTS | AWS\$1SQLSERVER\$1EXT.SYS\$1ALL\$1OBJECTS | 
| SYS.SYSOBJECTS | AWS\$1SQLSERVER\$1EXT.SYS\$1SYSOBJECTS | 
| SYS.SQL\$1MODULES | AWS\$1SQLSERVER\$1EXT.SYS\$1SQL\$1MODULES | 
| SYS.DATABASES | AWS\$1SQLSERVER\$1EXT.SYS\$1DATABASES | 
| INFORMATION\$1SCHEMA.SCHEMATA  | AWS\$1SQLSERVER\$1EXT.INFORMATION\$1SCHEMA\$1SCHEMATA | 
| INFORMATION\$1SCHEMA.VIEWS | AWS\$1SQLSERVER\$1EXT.INFORMATION\$1SCHEMA\$1VIEWS | 
| INFORMATION\$1SCHEMA.TABLES | AWS\$1SQLSERVER\$1EXT.INFORMATION\$1SCHEMA\$1TABLES | 
| INFORMATION\$1SCHEMA.COLUMNS | AWS\$1SQLSERVER\$1EXT.INFORMATION\$1SCHEMA\$1COLUMNS | 
| INFORMATION\$1SCHEMA.CHECK\$1CONSTRAINTS | AWS\$1SQLSERVER\$1EXT.INFORMATION\$1SCHEMA\$1CHECK\$1CONSTRAINTS | 
| INFORMATION\$1SCHEMA.REFERENTIAL\$1CONSTRAINTS | AWS\$1SQLSERVER\$1EXT.INFORMATION\$1SCHEMA\$1REFERENTIAL\$1CONSTRAINTS | 
| INFORMATION\$1SCHEMA.TABLE\$1CONSTRAINTS | AWS\$1SQLSERVER\$1EXT.INFORMATION\$1SCHEMA\$1TABLE\$1CONSTRAINTS | 
| INFORMATION\$1SCHEMA.KEY\$1COLUMN\$1USAGE | AWS\$1SQLSERVER\$1EXT.INFORMATION\$1SCHEMA\$1KEY\$1COLUMN\$1USAGE | 
| INFORMATION\$1SCHEMA.CONSTRAINT\$1TABLE\$1USAGE | AWS\$1SQLSERVER\$1EXT.INFORMATION\$1SCHEMA\$1CONSTRAINT\$1TABLE\$1USAGE  | 
| INFORMATION\$1SCHEMA.CONSTRAINT\$1COLUMN\$1USAGE | AWS\$1SQLSERVER\$1EXT.INFORMATION\$1SCHEMA\$1CONSTRAINT\$1COLUMN\$1USAGE  | 
| INFORMATION\$1SCHEMA.ROUTINES | AWS\$1SQLSERVER\$1EXT.INFORMATION\$1SCHEMA\$1ROUTINES | 
| SYS.SYSPROCESSES | AWS\$1SQLSERVER\$1EXT.SYS\$1SYSPROCESSES | 
| sys.system\$1objects | AWS\$1SQLSERVER\$1EXT.SYS\$1SYSTEM\$1OBJECTS | 

# AWS SCT 확장 팩을 사용하여 PostgreSQL에서 SQL Server 에이전트 에뮬레이션
<a name="CHAP_Source.SQLServer.ToPostgreSQL.ExtensionPack.Agent"></a>

SQL Server 에이전트는 SQL Server 작업을 실행하는 Microsoft Windows 서비스입니다. SQL Server 에이전트는 일정에 따라, 특정 이벤트 발생 시 또는 필요에 따라 작업을 실행합니다. SQL Server 에이전트에 대한 자세한 내용은 [Microsoft 기술 문서](https://docs.microsoft.com/en-us/sql/ssms/agent/sql-server-agent?view=sql-server-ver15)를 참조하세요.

PostgreSQL은 SQL Server 에이전트와 동일한 기능을 제공하지 않습니다. SQL Server 에이전트 기능을 에뮬레이션하기 위해는 확장 팩을 AWS SCT 생성합니다. 이 확장 팩은 AWS Lambda 및 Amazon CloudWatch를 사용합니다.는 일정을 관리하고 작업을 실행하는 데 사용하는 인터페이스를 AWS Lambda 구현합니다. Amazon CloudWatch는 예약 규칙을 유지 관리합니다.

AWS Lambda 및 Amazon CloudWatch는 JSON 파라미터를 사용하여 상호 작용합니다. 이 JSON 파라미터의 구조는 다음과 같습니다.

```
{
    "mode": mode,
    "parameters": {
        list of parameters
    },
    "callback": procedure name
}
```

이전 예제에서 *`mode`*는 작업 유형이고 `list of parameters`는 작업 유형에 따라 달라지는 파라미터 집합입니다. 또한 `procedure name`은 작업이 완료된 후 실행되는 프로시저의 이름입니다.

AWS SCT 는 Lambda 함수 하나를 사용하여 작업을 제어하고 실행합니다. CloudWatch 규칙은 작업 실행을 시작하고, 작업을 시작하는 데 필요한 정보를 제공합니다. CloudWatch 규칙이 트리거되면 규칙의 파라미터를 사용하여 Lambda 함수를 시작합니다.

프로시저를 호출하는 단순 작업을 생성하려면 다음 형식을 사용합니다.

```
{
    "mode": "run_job",
    "parameters": {
        "vendor": "mysql",
        "cmd": "lambda_db.nightly_job"
    }
}
```

여러 단계가 포함된 작업을 생성하려면 다음 형식을 사용합니다.

```
{
    "mode": "run_job",
    "parameters": {
        "job_name": "Job1",
        "enabled": "true",
        "start_step_id": 1,
        "notify_level_email": [0|1|2|3],
        "notify_email": email,
        "delete_level": [0|1|2|3],
        "job_callback": "ProcCallBackJob(job_name, code, message)",
        "step_callback": "ProcCallBackStep(job_name, step_id, code, message)"
    },
    "steps": [
        {
            "id":1,
            "cmd": "ProcStep1",
            "cmdexec_success_code": 0,
            "on_success_action": [|2|3|4],
            "on_success_step_id": 1,
            "on_fail_action": 0,
            "on_fail_step_id": 0,
            "retry_attempts": number,
            "retry_interval": number
        },
        {
            "id":2,
            "cmd": "ProcStep2",
            "cmdexec_success_code": 0,
            "on_success_action": [1|2|3|4],
            "on_success_step_id": 0,
            "on_fail_action": 0,
            "on_fail_step_id": 0,
            "retry_attempts": number,
            "retry_interval": number
        },
        ...
]
}
```

PostgreSQL에서 SQL Server 에이전트 동작을 에뮬레이션하기 위해 AWS SCT 확장 팩은 다음 테이블과 절차도 생성합니다.

## PostgreSQL에서 SQL Server 에이전트를 에뮬레이션하는 테이블
<a name="CHAP_Source.SQLServer.ToPostgreSQL.ExtensionPack.Agent.Tables"></a>

SQL Server 에이전트를 에뮬레이션하기 위해 확장 팩은 다음 테이블을 사용합니다.

**sysjobs**  
작업에 대한 정보를 저장합니다.

**sysjobsteps**  
작업의 단계에 대한 정보를 저장합니다.

**sysschedules**  
작업 예약에 대한 정보를 저장합니다.

**sysjobschedules**  
개별 작업의 예약 정보를 저장합니다.

**sysjobhistory**  
예약된 작업의 실행 관련 정보를 저장합니다.

## PostgreSQL에서 SQL Server 에이전트를 에뮬레이션하는 프로시저
<a name="CHAP_Source.SQLServer.ToPostgreSQL.ExtensionPack.Agent.Procedures"></a>

SQL Server 에이전트를 에뮬레이션하기 위해 확장 팩은 다음 프로시저를 사용합니다.

**sp\$1add\$1job**  
새 작업을 추가합니다.

**sp\$1add\$1jobstep**  
작업에 단계를 추가합니다.

**sp\$1add\$1schedule**  
Amazon CloudWatch에 새 예약 규칙을 생성합니다. 여러 작업에서 이 예약 일정을 사용할 수 있습니다.

**sp\$1attach\$1schedule**  
선택한 작업의 예약을 설정합니다.

**sp\$1add\$1jobschedule**  
Amazon CloudWatch에서 작업에 대한 예약 규칙을 생성하고 이 규칙의 대상을 설정합니다.

**sp\$1update\$1job**  
이전에 생성한 작업의 속성을 업데이트합니다.

**sp\$1update\$1jobstep**  
작업의 단계 속성을 업데이트합니다.

**sp\$1update\$1schedule**  
Amazon CloudWatch에서 예약 규칙의 속성을 업데이트합니다.

**sp\$1update\$1jobschedule**  
지정된 작업의 예약 속성을 업데이트합니다.

**sp\$1delete\$1job**  
작업을 삭제합니다.

**sp\$1delete\$1jobstep**  
작업에서 작업 단계를 삭제합니다.

**sp\$1delete\$1schedule**  
일정을 삭제합니다.

**sp\$1delete\$1jobschedule**  
Amazon CloudWatch에서 지정된 작업의 예약 규칙을 삭제합니다.

**sp\$1detach\$1schedule**  
예약과 작업 간의 연결을 제거합니다.

**get\$1jobs, update\$1job**  
와 상호 작용하는 내부 절차입니다 AWS Elastic Beanstalk.

**sp\$1verify\$1job\$1date, sp\$1verify\$1job\$1time, sp\$1verify\$1job, sp\$1verify\$1jobstep, sp\$1verify\$1schedule, sp\$1verify\$1job\$1identifiers, sp\$1verify\$1schedule\$1identifiers**  
설정을 확인하는 내부 프로시저입니다.

## PostgreSQL에서 SQL Server 에이전트를 에뮬레이션하는 프로시저의 구문
<a name="CHAP_Source.SQLServer.ToPostgreSQL.ExtensionPack.Agent.Syntax"></a>

확장 팩의 `aws_sqlserver_ext.sp_add_job` 프로시저는 `msdb.dbo.sp_add_job` 프로시저를 에뮬레이션합니다. 소스 SQL Server 에이전트 프로시저에 대한 자세한 내용은 [Microsoft 기술 문서](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-add-job-transact-sql?view=sql-server-ver15)를 참조하세요.

```
par_job_name varchar,
par_enabled smallint = 1,
par_description varchar = NULL::character varying,
par_start_step_id integer = 1,
par_category_name varchar = NULL::character varying,
par_category_id integer = NULL::integer,
par_owner_login_name varchar = NULL::character varying,
par_notify_level_eventlog integer = 2,
par_notify_level_email integer = 0,
par_notify_level_netsend integer = 0,
par_notify_level_page integer = 0,
par_notify_email_operator_name varchar = NULL::character varying,
par_notify_netsend_operator_name varchar = NULL::character varying,
par_notify_page_operator_name varchar = NULL::character varying,
par_delete_level integer = 0,
inout par_job_id integer = NULL::integer,
par_originating_server varchar = NULL::character varying,
out returncode integer
```

확장 팩의 `aws_sqlserver_ext.sp_add_jobstep` 프로시저는 `msdb.dbo.sp_add_jobstep` 프로시저를 에뮬레이션합니다. 소스 SQL Server 에이전트 프로시저에 대한 자세한 내용은 [Microsoft 기술 문서](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-add-jobstep-transact-sql?view=sql-server-ver15)를 참조하세요.

```
par_job_id integer = NULL::integer,
par_job_name varchar = NULL::character varying,
par_step_id integer = NULL::integer,
par_step_name varchar = NULL::character varying,
par_subsystem varchar = 'TSQL'::bpchar,
par_command text = NULL::text,
par_additional_parameters text = NULL::text,
par_cmdexec_success_code integer = 0,
par_on_success_action smallint = 1,
par_on_success_step_id integer = 0,
par_on_fail_action smallint = 2,
par_on_fail_step_id integer = 0,
par_server varchar = NULL::character varying,
par_database_name varchar = NULL::character varying,
par_database_user_name varchar = NULL::character varying,
par_retry_attempts integer = 0,
par_retry_interval integer = 0,
par_os_run_priority integer = 0,
par_output_file_name varchar = NULL::character varying,
par_flags integer = 0,
par_proxy_id integer = NULL::integer,
par_proxy_name varchar = NULL::character varying,
inout par_step_uid char = NULL::bpchar,
out returncode integer
```

확장 팩의 `aws_sqlserver_ext.sp_add_schedule` 프로시저는 `msdb.dbo.sp_add_schedule` 프로시저를 에뮬레이션합니다. 소스 SQL Server 에이전트 프로시저에 대한 자세한 내용은 [Microsoft 기술 문서](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-add-schedule-transact-sql?view=sql-server-ver15)를 참조하세요.

```
par_schedule_name varchar,
par_enabled smallint = 1,
par_freq_type integer = 0,
par_freq_interval integer = 0,
par_freq_subday_type integer = 0,
par_freq_subday_interval integer = 0,
par_freq_relative_interval integer = 0,
par_freq_recurrence_factor integer = 0,
par_active_start_date integer = NULL::integer,
par_active_end_date integer = 99991231,
par_active_start_time integer = 0,
par_active_end_time integer = 235959,
par_owner_login_name varchar = NULL::character varying,
*inout par_schedule_uid char = NULL::bpchar,*
inout par_schedule_id integer = NULL::integer,
par_originating_server varchar = NULL::character varying,
out returncode integer
```

확장 팩의 `aws_sqlserver_ext.sp_attach_schedule` 프로시저는 `msdb.dbo.sp_attach_schedule` 프로시저를 에뮬레이션합니다. 소스 SQL Server 에이전트 프로시저에 대한 자세한 내용은 [Microsoft 기술 문서](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-attach-schedule-transact-sql?view=sql-server-ver15)를 참조하세요.

```
par_job_id integer = NULL::integer,
par_job_name varchar = NULL::character varying,
par_schedule_id integer = NULL::integer,
par_schedule_name varchar = NULL::character varying,
par_automatic_post smallint = 1,
out returncode integer
```

확장 팩의 `aws_sqlserver_ext.sp_add_jobschedule` 프로시저는 `msdb.dbo.sp_add_jobschedule` 프로시저를 에뮬레이션합니다. 소스 SQL Server 에이전트 프로시저에 대한 자세한 내용은 [Microsoft 기술 문서](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-add-jobschedule-transact-sql?view=sql-server-ver15)를 참조하세요.

```
par_job_id integer = NULL::integer,
par_job_name varchar = NULL::character varying,
par_name varchar = NULL::character varying,
par_enabled smallint = 1,
par_freq_type integer = 1,
par_freq_interval integer = 0,
par_freq_subday_type integer = 0,
par_freq_subday_interval integer = 0,
par_freq_relative_interval integer = 0,
par_freq_recurrence_factor integer = 0,
par_active_start_date integer = NULL::integer,
par_active_end_date integer = 99991231,
par_active_start_time integer = 0,
par_active_end_time integer = 235959,
inout par_schedule_id integer = NULL::integer,
par_automatic_post smallint = 1,
inout par_schedule_uid char = NULL::bpchar,
out returncode integer
```

확장 팩의 `aws_sqlserver_ext.sp_delete_job` 프로시저는 `msdb.dbo.sp_delete_job` 프로시저를 에뮬레이션합니다. 소스 SQL Server 에이전트 프로시저에 대한 자세한 내용은 [Microsoft 기술 문서](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-delete-job-transact-sql?view=sql-server-ver15)를 참조하세요.

```
par_job_id integer = NULL::integer,
par_job_name varchar = NULL::character varying,
par_originating_server varchar = NULL::character varying,
par_delete_history smallint = 1,
par_delete_unused_schedule smallint = 1,
out returncode integer
```

확장 팩의 `aws_sqlserver_ext.sp_delete_jobstep` 프로시저는 `msdb.dbo.sp_delete_jobstep` 프로시저를 에뮬레이션합니다. 소스 SQL Server 에이전트 프로시저에 대한 자세한 내용은 [Microsoft 기술 문서](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-delete-jobsteplog-transact-sql?view=sql-server-ver15)를 참조하세요.

```
par_job_id integer = NULL::integer,
par_job_name varchar = NULL::character varying,
par_step_id integer = NULL::integer,
out returncode integer
```

확장 팩의 `aws_sqlserver_ext.sp_delete_jobschedule` 프로시저는 `msdb.dbo.sp_delete_jobschedule` 프로시저를 에뮬레이션합니다. 소스 SQL Server 에이전트 프로시저에 대한 자세한 내용은 [Microsoft 기술 문서](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-delete-jobschedule-transact-sql?view=sql-server-ver15)를 참조하세요.

```
par_job_id integer = NULL::integer,
par_job_name varchar = NULL::character varying,
par_name varchar = NULL::character varying,
par_keep_schedule integer = 0,
par_automatic_post smallint = 1,
out returncode integer
```

확장 팩의 `aws_sqlserver_ext.sp_delete_schedule` 프로시저는 `msdb.dbo.sp_delete_schedule` 프로시저를 에뮬레이션합니다. 소스 SQL Server 에이전트 프로시저에 대한 자세한 내용은 [Microsoft 기술 문서](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-delete-schedule-transact-sql?view=sql-server-ver15)를 참조하세요.

```
par_schedule_id integer = NULL::integer,
par_schedule_name varchar = NULL::character varying,
par_force_delete smallint = 0,
par_automatic_post smallint = 1,
out returncode integer
```

확장 팩의 `aws_sqlserver_ext.sp_detach_schedule` 프로시저는 `msdb.dbo.sp_detach_schedule` 프로시저를 에뮬레이션합니다. 소스 SQL Server 에이전트 프로시저에 대한 자세한 내용은 [Microsoft 기술 문서](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-detach-schedule-transact-sql?view=sql-server-ver15)를 참조하세요.

```
par_job_id integer = NULL::integer,
par_job_name varchar = NULL::character varying,
par_schedule_id integer = NULL::integer,
par_schedule_name varchar = NULL::character varying,
par_delete_unused_schedule smallint = 0,
par_automatic_post smallint = 1,
out returncode integer
```

확장 팩의 `aws_sqlserver_ext.sp_update_job` 프로시저는 `msdb.dbo.sp_update_job` 프로시저를 에뮬레이션합니다. 소스 SQL Server 에이전트 프로시저에 대한 자세한 내용은 [Microsoft 기술 문서](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-update-job-transact-sql?view=sql-server-ver15)를 참조하세요.

```
par_job_id integer = NULL::integer
par_job_name varchar = NULL::character varying
par_new_name varchar = NULL::character varying
par_enabled smallint = NULL::smallint
par_description varchar = NULL::character varying
par_start_step_id integer = NULL::integer
par_category_name varchar = NULL::character varying
par_owner_login_name varchar = NULL::character varying
par_notify_level_eventlog integer = NULL::integer
par_notify_level_email integer = NULL::integer
par_notify_level_netsend integer = NULL::integer
par_notify_level_page integer = NULL::integer
par_notify_email_operator_name varchar = NULL::character varying
par_notify_netsend_operator_name varchar = NULL::character varying
par_notify_page_operator_name varchar = NULL::character varying
par_delete_level integer = NULL::integer
par_automatic_post smallint = 1
out returncode integer
```

확장 팩의 `aws_sqlserver_ext.sp_update_jobschedule` 프로시저는 `msdb.dbo.sp_update_jobschedule` 프로시저를 에뮬레이션합니다. 소스 SQL Server 에이전트 프로시저에 대한 자세한 내용은 [Microsoft 기술 문서](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-update-jobschedule-transact-sql?view=sql-server-ver15)를 참조하세요.

```
par_job_id integer = NULL::integer
par_job_name varchar = NULL::character varying
par_name varchar = NULL::character varying
par_new_name varchar = NULL::character varying
par_enabled smallint = NULL::smallint
par_freq_type integer = NULL::integer
par_freq_interval integer = NULL::integer
par_freq_subday_type integer = NULL::integer
par_freq_subday_interval integer = NULL::integer
par_freq_relative_interval integer = NULL::integer
par_freq_recurrence_factor integer = NULL::integer
par_active_start_date integer = NULL::integer
par_active_end_date integer = NULL::integer
par_active_start_time integer = NULL::integer
                par_active_end_time integer = NULL::integer
par_automatic_post smallint = 1
out returncode integer
```

확장 팩의 `aws_sqlserver_ext.sp_update_jobstep` 프로시저는 `msdb.dbo.sp_update_jobstep` 프로시저를 에뮬레이션합니다. 소스 SQL Server 에이전트 프로시저에 대한 자세한 내용은 [Microsoft 기술 문서](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-update-jobstep-transact-sql?view=sql-server-ver15)를 참조하세요.

```
par_job_id integer = NULL::integer
par_job_name varchar = NULL::character varying
par_step_id integer = NULL::integer
par_step_name varchar = NULL::character varying
par_subsystem varchar = NULL::character varying
par_command text = NULL::text
par_additional_parameters text = NULL::text
par_cmdexec_success_code integer = NULL::integer
par_on_success_action smallint = NULL::smallint
par_on_success_step_id integer = NULL::integer
par_on_fail_action smallint = NULL::smallint
par_on_fail_step_id integer = NULL::integer
par_server varchar = NULL::character varying
par_database_name varchar = NULL::character varying
par_database_user_name varchar = NULL::character varying
par_retry_attempts integer = NULL::integer
par_retry_interval integer = NULL::integer
par_os_run_priority integer = NULL::integer
par_output_file_name varchar = NULL::character varying
par_flags integer = NULL::integer
par_proxy_id integer = NULL::integer
par_proxy_name varchar = NULL::character varying
out returncode integer
```

확장 팩의 `aws_sqlserver_ext.sp_update_schedule` 프로시저는 `msdb.dbo.sp_update_schedule` 프로시저를 에뮬레이션합니다. 소스 SQL Server 에이전트 프로시저에 대한 자세한 내용은 [Microsoft 기술 문서](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-update-schedule-transact-sql?view=sql-server-ver15)를 참조하세요.

```
par_schedule_id integer = NULL::integer
par_name varchar = NULL::character varying
par_new_name varchar = NULL::character varying
par_enabled smallint = NULL::smallint
par_freq_type integer = NULL::integer
par_freq_interval integer = NULL::integer
par_freq_subday_type integer = NULL::integer
par_freq_subday_interval integer = NULL::integer
par_freq_relative_interval integer = NULL::integer
par_freq_recurrence_factor integer = NULL::integer
par_active_start_date integer = NULL::integer
par_active_end_date integer = NULL::integer
par_active_start_time integer = NULL::integer
par_active_end_time integer = NULL::integer
par_owner_login_name varchar = NULL::character varying
par_automatic_post smallint = 1
out returncode integer
```

## PostgreSQL에서 SQL Server 에이전트를 에뮬레이션하는 프로시저 사용 예제
<a name="CHAP_Source.SQLServer.ToPostgreSQL.ExtensionPack.Agent.Examples"></a>

새 작업을 추가하려면 다음과 같이 `aws_sqlserver_ext.sp_add_job` 프로시저를 사용합니다.

```
SELECT * FROM aws_sqlserver_ext.sp_add_job (
    par_job_name := 'test_job',
    par_enabled := 1::smallint,
    par_start_step_id := 1::integer,
    par_category_name := '[Uncategorized (Local)]',
    par_owner_login_name := 'sa');
```

새 작업 단계를 추가하려면 다음과 같이 `aws_sqlserver_ext.sp_add_jobstep` 프로시저를 사용합니다.

```
SELECT * FROM aws_sqlserver_ext.sp_add_jobstep (
    par_job_name := 'test_job',
    par_step_id := 1::smallint,
    par_step_name := 'test_job_step1',
    par_subsystem := 'TSQL',
    par_command := 'EXECUTE [dbo].[PROC_TEST_JOB_STEP1];',
    par_server := NULL,
    par_database_name := 'GOLD_TEST_SS');
```

단순 일정을 추가하려면 다음과 같이 `aws_sqlserver_ext.sp_add_schedule` 프로시저를 사용합니다.

```
SELECT * FROM aws_sqlserver_ext.sp_add_schedule(
    par_schedule_name := 'RunOnce',
    par_freq_type := 1,
    par_active_start_time := 233000);
```

작업 일정을 설정하려면 다음과 같이 `aws_sqlserver_ext.sp_attach_schedule` 프로시저를 사용합니다.

```
SELECT * FROM aws_sqlserver_ext.sp_attach_schedule (
    par_job_name := 'test_job',
    par_schedule_name := 'NightlyJobs');
```

작업에 대한 예약을 생성하려면 다음과 같이 `aws_sqlserver_ext.sp_add_jobschedule` 프로시저를 사용합니다.

```
SELECT * FROM aws_sqlserver_ext.sp_add_jobschedule (
    par_job_name := 'test_job2',
    par_name := 'test_schedule2',
    par_enabled := 1::smallint,
    par_freq_type := 4,
    par_freq_interval := 1,
    par_freq_subday_type := 4,
    par_freq_subday_interval := 1,
    par_freq_relative_interval := 0,
    par_freq_recurrence_factor := 0,
    par_active_start_date := 20100801,
    par_active_end_date := 99991231,
    par_active_start_time := 0,
    par_active_end_time := 0);
```

## PostgreSQL에서 SQL Server 에이전트를 에뮬레이션하기 위한 사용 사례 예제
<a name="CHAP_Source.SQLServer.ToPostgreSQL.ExtensionPack.Agent.UseCases"></a>

소스 데이터베이스 코드가 SQL Server Agent를 사용하여 작업을 실행하는 경우 용 SQL Server to PostgreSQL 확장 팩 AWS SCT 을 사용하여이 코드를 PostgreSQL로 변환할 수 있습니다. 확장 팩은 AWS Lambda 함수를 사용하여 SQL Server 에이전트의 동작을 에뮬레이션합니다.

새 AWS Lambda 함수를 생성하거나 기존 함수를 등록할 수 있습니다.

**새 AWS Lambda 함수를 생성하려면**

1. 의 대상 데이터베이스 트리 AWS SCT에서 컨텍스트(마우스 오른쪽 버튼 클릭) 메뉴를 열고 **확장 팩 적용을** 선택한 다음 **PostgreSQL**을 선택합니다.

   확장 팩 마법사가 표시됩니다.

1. **SQL Server Agent emulation service** 탭에서 다음을 수행합니다.
   + ** AWS Lambda 함수 생성을** 선택합니다.
   + **Database login**에 대상 데이터베이스 사용자의 이름을 입력합니다.
   + **데이터베이스 암호**에 이전 단계에서 입력한 사용자 이름의 암호를 입력합니다.
   + **Python library folder**에 Python 라이브러리 폴더의 경로를 입력합니다.
   + ** AWS Lambda 함수 생성을** 선택한 **후 다음을** 선택합니다.

**이전에 배포한 AWS Lambda 함수를 등록하려면**
+ 대상 데이터베이스에서 다음 스크립트를 실행합니다.

  ```
  SELECT
      FROM aws_sqlserver_ext.set_service_setting(
          p_service := 'JOB', 
          p_setting := 'LAMBDA_ARN', 
          p_value := ARN)
  ```

  이전 예제에서 *`ARN`*은 배포된 AWS Lambda 함수의 Amazon 리소스 이름(ARN)입니다.

다음 예제에서는 한 단계로 구성된 단순 작업을 생성합니다. 이 작업은 5분마다 이전에 생성된 `job_example` 함수를 실행합니다. 이 함수는 `job_example_table` 테이블에 레코드를 삽입합니다.

**이 단순 작업을 생성하려면**

1. 다음과 같이 `aws_sqlserver_ext.sp_add_job` 함수를 사용하여 작업을 생성합니다.

   ```
   SELECT
       FROM aws_sqlserver_ext.sp_add_job (
           par_job_name := 'test_simple_job');
   ```

1. 다음과 같이 `aws_sqlserver_ext.sp_add_jobstep` 함수를 사용하여 작업 단계를 생성합니다.

   ```
   SELECT
       FROM aws_sqlserver_ext.sp_add_jobstep (
           par_job_name := 'test_simple_job', 
           par_step_name := 'test_simple_job_step1', 
           par_command := 'PERFORM job_simple_example;');
   ```

   작업 단계는 함수가 수행하는 작업을 지정합니다.

1. 다음과 같이 `aws_sqlserver_ext.sp_add_jobschedule` 함수를 사용하여 작업에 대한 스케줄러를 생성합니다.

   ```
   SELECT
       FROM aws_sqlserver_ext.sp_add_jobschedule (
           par_job_name := 'test_simple_job', 
           par_name := 'test_schedule', 
           par_freq_type := 4, /* Daily */
           par_freq_interval := 1, /* frequency_interval is unused */
           par_freq_subday_type := 4, /* Minutes */
           par_freq_subday_interval := 5 /* 5 minutes */);
   ```

   작업 단계는 함수가 수행하는 작업을 지정합니다.

이 작업을 삭제하려면 다음과 같이 `aws_sqlserver_ext.sp_delete_job` 함수를 사용합니다.

```
PERFORM aws_sqlserver_ext.sp_delete_job(
    par_job_name := 'PeriodicJob1'::character varying,
    par_delete_history := 1::smallint,
    par_delete_unused_schedule := 1::smallint);
```

# AWS SCT 확장 팩을 사용하여 PostgreSQL에서 SQL Server Database Mail 에뮬레이션
<a name="CHAP_Source.SQLServer.ToPostgreSQL.ExtensionPack.Mail"></a>

SQL Server Database Mail을 사용하여 SQL Server 데이터베이스 엔진 또는 Azure SQL Managed Instance에서 사용자에게 이메일 메시지를 보낼 수 있습니다. 이러한 이메일 메시지는 쿼리 결과를 포함하거나 네트워크에 있는 리소스의 파일을 포함할 수 있습니다. SQL Server Database Mail에 대한 자세한 내용은 [Microsoft 기술 문서](https://docs.microsoft.com/en-us/sql/relational-databases/database-mail/database-mail?view=sql-server-ver15)를 참조하세요.

PostgreSQL은 SQL Server Database Mail과 동일한 기능을 제공하지 않습니다. SQL Server Database Mail 기능을 에뮬레이션하기 위해 AWS SCT 는 확장 팩을 생성합니다. 이 확장 팩은 AWS Lambda 및 Amazon Simple Email Service(Amazon SES)를 사용합니다.는 사용자에게 Amazon SES 이메일 전송 서비스와 상호 작용할 수 있는 인터페이스를 AWS Lambda 제공합니다. 이 상호 작용을 설정하려면 Lambda 함수의 Amazon 리소스 이름(ARN)을 추가합니다.

새 이메일 계정의 경우 다음 명령을 사용합니다.

```
do
$$
begin
PERFORM sysmail_add_account_sp (
    par_account_name :='your_account_name',
    par_email_address := 'your_account_email',
    par_display_name := 'your_account_display_name',
    par_mailserver_type := 'AWSLAMBDA'
    par_mailserver_name := 'ARN'
);
end;
$$ language plpgsql;
```

Lambda 함수의 ARN을 기존 이메일 계정에 추가하려면 다음 명령을 사용합니다.

```
do
$$
begin
PERFORM sysmail_update_account_sp (
    par_account_name :='existind_account_name',
    par_mailserver_type := 'AWSLAMBDA'
    par_mailserver_name := 'ARN'
);
end;
$$ language plpgsql;
```

이전 예제에서 *`ARN`*은 Lambda 함수의 ARN입니다.

PostgreSQL에서 SQL Server Database Mail 동작을 에뮬레이션하기 위해 AWS SCT 확장 팩은 다음과 같은 테이블, 보기 및 프로시저를 사용합니다.

## PostgreSQL에서 SQL Server Database Mail을 에뮬레이션하는 테이블
<a name="CHAP_Source.SQLServer.ToPostgreSQL.ExtensionPack.Mail.Tables"></a>

SQL Server Database Mail을 에뮬레이션하기 위해 확장 팩은 다음 테이블을 사용합니다.

**sysmail\$1account**  
이메일 계정에 대한 정보를 저장합니다.

**sysmail\$1profile**  
사용자 프로필에 대한 정보를 저장합니다.

**sysmail\$1server**  
이메일 서버에 대한 정보를 저장합니다.

**sysmail\$1mailitems**  
이메일 메시지 목록을 저장합니다.

**sysmail\$1attachment**  
각 이메일 첨부 파일마다 하나의 행을 포함합니다.

**sysmail\$1log**  
이메일 메시지 전송에 대한 서비스 정보를 저장합니다.

**sysmail\$1profileaccount**  
사용자 프로필 및 이메일 계정에 대한 정보를 저장합니다.

## PostgreSQL에서 SQL Server Database Mail을 에뮬레이션하는 보기
<a name="CHAP_Source.SQLServer.ToPostgreSQL.ExtensionPack.Mail.Views"></a>

SQL Server Database Mail을 에뮬레이션하기 위해는 호환성을 보장하기 위해 PostgreSQL 데이터베이스에 다음 뷰를 AWS SCT 생성합니다. 확장 팩에서는 이러한 보기를 사용하지 않지만 변환된 코드는 이러한 보기를 쿼리할 수 있습니다.

**sysmail\$1allitems**  
모든 이메일 목록이 포함됩니다.

**sysmail\$1faileditems**  
전송할 수 없는 이메일 목록이 포함됩니다.

**sysmail\$1sentitems**  
보낸 이메일 목록이 포함됩니다.

**sysmail\$1unsentitems**  
아직 전송되지 않은 이메일 목록이 포함됩니다.

**sysmail\$1mailattachments**  
첨부 파일 목록이 포함됩니다.

## PostgreSQL에서 SQL Server Database Mail을 에뮬레이션하는 프로시저
<a name="CHAP_Source.SQLServer.ToPostgreSQL.ExtensionPack.Mail.Procedures"></a>

SQL Server Database Mail을 에뮬레이션하기 위해 확장 팩은 다음 프로시저를 사용합니다.

**sp\$1send\$1dbmail**  
지정된 수신자에게 이메일을 보냅니다.

**sysmail\$1add\$1profile\$1sp**  
새 사용자 프로필을 생성합니다.

**sysmail\$1add\$1account\$1sp**  
SMTP(Simple Mail Transfer Protocol) 보안 인증 정보 등과 같은 정보를 저장하는 새로운 이메일 계정을 생성합니다.

**sysmail\$1add\$1profileaccount\$1sp**  
지정된 사용자 프로필에 이메일 계정을 추가합니다.

**sysmail\$1update\$1profile\$1sp**  
설명, 이름 등과 같은 사용자 프로필의 속성을 변경합니다.

**sysmail\$1update\$1account\$1sp**  
기존 이메일 계정의 정보를 변경합니다.

**sysmail\$1update\$1profileaccount\$1sp**  
지정된 사용자 프로필의 이메일 계정 정보를 업데이트합니다.

**sysmail\$1delete\$1profileaccount\$1sp**  
지정된 사용자 프로필에서 이메일 계정을 제거합니다.

**sysmail\$1delete\$1account\$1sp**  
이메일 계정을 삭제합니다.

**sysmail\$1delete\$1profile\$1sp**  
사용자 프로필을 삭제합니다.

**sysmail\$1delete\$1mailitems\$1sp**  
내부 테이블에서 이메일을 삭제합니다.

**sysmail\$1help\$1profile\$1sp**  
사용자 프로필에 대한 정보를 표시합니다.

**sysmail\$1help\$1account\$1sp**  
이메일 계정에 대한 정보를 표시합니다.

**sysmail\$1help\$1profileaccount\$1sp**  
사용자 프로필과 연결된 이메일 계정 관련 정보를 표시합니다.

**sysmail\$1dbmail\$1json**  
 AWS Lambda 함수에 대한 JSON 요청을 생성하는 내부 절차입니다.

**sysmail\$1verify\$1profile\$1sp, sysmail\$1verify\$1account\$1sp, sysmail\$1verify\$1addressparams\$1sp**  
설정을 확인하는 내부 프로시저입니다.

**sp\$1get\$1dbmail, sp\$1set\$1dbmail, sysmail\$1dbmail\$1xml**  
더 이상 사용되지 않는 내부 프로시저입니다.

## PostgreSQL에서 SQL Server Database Mail을 에뮬레이션하는 프로시저의 구문
<a name="CHAP_Source.SQLServer.ToPostgreSQL.ExtensionPack.Mail.Syntax"></a>

확장 팩의 `aws_sqlserver_ext.sp_send_dbmail` 프로시저는 `msdb.dbo.sp_send_dbmail` 프로시저를 에뮬레이션합니다. 소스 SQL Server Database Mail 프로시저에 대한 자세한 내용은 [Microsoft 기술 문서](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-send-dbmail-transact-sql?view=sql-server-ver15)를 참조하세요.

```
par_profile_name varchar = NULL::character varying,
par_recipients text = NULL::text,
par_copy_recipients text = NULL::text,
par_blind_copy_recipients text = NULL::text,
par_subject varchar = NULL::character varying,
par_body text = NULL::text,
par_body_format varchar = NULL::character varying,
par_importance varchar = 'NORMAL'::character varying,
par_sensitivity varchar = 'NORMAL'::character varying,
par_file_attachments text = NULL::text,
par_query text = NULL::text,
par_execute_query_database varchar = NULL::character varying,
par_attach_query_result_as_file smallint = 0,
par_query_attachment_filename varchar = NULL::character varying,
par_query_result_header smallint = 1,
par_query_result_width integer = 256,
par_query_result_separator VARCHAR = ' '::character varying,
par_exclude_query_output smallint = 0,
par_append_query_error smallint = 0,
par_query_no_truncate smallint = 0,
par_query_result_no_padding smallint = 0,
out par_mailitem_id integer,
par_from_address text = NULL::text,
par_reply_to text = NULL::text,
out returncode integer
```

확장 팩의 `aws_sqlserver_ext.sysmail_delete_mailitems_sp` 프로시저는 `msdb.dbo.sysmail_delete_mailitems_sp` 프로시저를 에뮬레이션합니다. 소스 SQL Server Database Mail 프로시저에 대한 자세한 내용은 [Microsoft 기술 문서](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sysmail-delete-mailitems-sp-transact-sql?view=sql-server-ver15)를 참조하세요.

```
par_sent_before timestamp = NULL::timestamp without time zone,
par_sent_status varchar = NULL::character varying,
out returncode integer
```

확장 팩의 `aws_sqlserver_ext.sysmail_add_profile_sp` 프로시저는 `msdb.dbo.sysmail_add_profile_sp` 프로시저를 에뮬레이션합니다. 소스 SQL Server Database Mail 프로시저에 대한 자세한 내용은 [Microsoft 기술 문서](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sysmail-add-profile-sp-transact-sql?view=sql-server-ver15)를 참조하세요.

```
par_profile_name varchar,
par_description varchar = NULL::character varying,
out par_profile_id integer,
out returncode integer
```

확장 팩의 `aws_sqlserver_ext.sysmail_add_account_sp` 프로시저는 `msdb.dbo.sysmail_add_account_sp` 프로시저를 에뮬레이션합니다. 소스 SQL Server Database Mail 프로시저에 대한 자세한 내용은 [Microsoft 기술 문서](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sysmail-add-account-sp-transact-sql?view=sql-server-ver15)를 참조하세요.

```
par_account_name varchar
par_email_address varchar
par_display_name varchar = NULL::character varying
par_replyto_address varchar = NULL::character varying
par_description varchar = NULL::character varying
par_mailserver_name varchar = NULL::character varying
par_mailserver_type varchar = 'SMTP'::bpchar
par_port integer = 25
par_username varchar = NULL::character varying
par_password varchar = NULL::character varying
par_use_default_credentials smallint = 0
par_enable_ssl smallint = 0
out par_account_id integer
out returncode integer
```

확장 팩의 `aws_sqlserver_ext.sysmail_add_profileaccount_sp` 프로시저는 `msdb.dbo.sysmail_add_profileaccount_sp` 프로시저를 에뮬레이션합니다. 소스 SQL Server Database Mail 프로시저에 대한 자세한 내용은 [Microsoft 기술 문서](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sysmail-add-profileaccount-sp-transact-sql?view=sql-server-ver15)를 참조하세요.

```
par_profile_id integer = NULL::integer,
par_profile_name varchar = NULL::character varying,
par_account_id integer = NULL::integer,
par_account_name varchar = NULL::character varying,
par_sequence_number integer = NULL::integer,
out returncode integer
```

확장 팩의 `aws_sqlserver_ext.sysmail_help_profile_sp` 프로시저는 `msdb.dbo.sysmail_help_profile_sp` 프로시저를 에뮬레이션합니다. 소스 SQL Server Database Mail 프로시저에 대한 자세한 내용은 [Microsoft 기술 문서](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sysmail-help-profile-sp-transact-sql?view=sql-server-ver15)를 참조하세요.

```
par_profile_id integer = NULL::integer,
par_profile_name varchar = NULL::character varying,
out returncode integer
```

확장 팩의 `aws_sqlserver_ext.sysmail_update_profile_sp` 프로시저는 `msdb.dbo.sysmail_update_profile_sp` 프로시저를 에뮬레이션합니다. 소스 SQL Server Database Mail 프로시저에 대한 자세한 내용은 [Microsoft 기술 문서](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sysmail-update-profile-sp-transact-sql?view=sql-server-ver15)를 참조하세요.

```
par_profile_id integer = NULL::integer,
par_profile_name varchar = NULL::character varying,
par_description varchar = NULL::character varying,
out returncode integer
```

확장 팩의 `aws_sqlserver_ext.sysmail_delete_profile_sp` 프로시저는 `msdb.dbo.sysmail_delete_profile_sp` 프로시저를 에뮬레이션합니다. 소스 SQL Server Database Mail 프로시저에 대한 자세한 내용은 [Microsoft 기술 문서](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sysmail-delete-profile-sp-transact-sql?view=sql-server-ver15)를 참조하세요.

```
par_profile_id integer = NULL::integer,
par_profile_name varchar = NULL::character varying,
par_force_delete smallint = 1,
out returncode integer
```

확장 팩의 `aws_sqlserver_ext.sysmail_help_account_sp` 프로시저는 `msdb.dbo.sysmail_help_account_sp` 프로시저를 에뮬레이션합니다. 소스 SQL Server Database Mail 프로시저에 대한 자세한 내용은 [Microsoft 기술 문서](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sysmail-help-account-sp-transact-sql?view=sql-server-ver15)를 참조하세요.

```
par_account_id integer = NULL::integer,
par_account_name varchar = NULL::character varying,
out returncode integer
```

확장 팩의 `aws_sqlserver_ext.sysmail_update_account_sp` 프로시저는 `msdb.dbo.sysmail_update_account_sp` 프로시저를 에뮬레이션합니다. 소스 SQL Server Database Mail 프로시저에 대한 자세한 내용은 [Microsoft 기술 문서](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sysmail-update-account-sp-transact-sql?view=sql-server-ver15)를 참조하세요.

```
par_account_id integer = NULL::integer,
par_account_name varchar = NULL::character varying,
par_email_address varchar = NULL::character varying,
par_display_name varchar = NULL::character varying,
par_replyto_address varchar = NULL::character varying,
par_description varchar = NULL::character varying,
par_mailserver_name varchar = NULL::character varying,
par_mailserver_type varchar = NULL::character varying,
par_port integer = NULL::integer,
par_username varchar = NULL::character varying,
par_password varchar = NULL::character varying,
par_use_default_credentials smallint = NULL::smallint,
par_enable_ssl smallint = NULL::smallint,
par_timeout integer = NULL::integer,
par_no_credential_change smallint = NULL::smallint,
out returncode integer
```

확장 팩의 `aws_sqlserver_ext.sysmail_delete_account_sp` 프로시저는 `msdb.dbo.sysmail_delete_account_sp` 프로시저를 에뮬레이션합니다. 소스 SQL Server Database Mail 프로시저에 대한 자세한 내용은 [Microsoft 기술 문서](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sysmail-delete-account-sp-transact-sql?view=sql-server-ver15)를 참조하세요.

```
par_account_id integer = NULL::integer,
par_account_name varchar = NULL::character varying,
out returncode integer
```

확장 팩의 `aws_sqlserver_ext.sysmail_help_profileaccount_sp` 프로시저는 `msdb.dbo.sysmail_help_profileaccount_sp` 프로시저를 에뮬레이션합니다. 소스 SQL Server Database Mail 프로시저에 대한 자세한 내용은 [Microsoft 기술 문서](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sysmail-help-profileaccount-sp-transact-sql?view=sql-server-ver15)를 참조하세요.

```
par_profile_id integer = NULL::integer,
par_profile_name varchar = NULL::character varying,
par_account_id integer = NULL::integer,
par_account_name varchar = NULL::character varying,
out returncode integer
```

확장 팩의 `aws_sqlserver_ext.sysmail_update_profileaccount_sp` 프로시저는 `msdb.dbo.sysmail_update_profileaccount_sp` 프로시저를 에뮬레이션합니다. 소스 SQL Server Database Mail 프로시저에 대한 자세한 내용은 [Microsoft 기술 문서](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sysmail-update-profileaccount-sp-transact-sql?view=sql-server-ver15)를 참조하세요.

```
par_profile_id integer = NULL::integer,
par_profile_name varchar = NULL::character varying,
par_account_id integer = NULL::integer,
par_account_name varchar = NULL::character varying,
par_sequence_number integer = NULL::integer,
out returncode integer
```

확장 팩의 `aws_sqlserver_ext.sysmail_delete_profileaccount_sp` 프로시저는 `msdb.dbo.sysmail_delete_profileaccount_sp` 프로시저를 에뮬레이션합니다. 소스 SQL Server Database Mail 프로시저에 대한 자세한 내용은 [Microsoft 기술 문서](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sysmail-delete-profileaccount-sp-transact-sql?view=sql-server-ver15)를 참조하세요.

```
par_profile_id integer = NULL::integer,
par_profile_name varchar = NULL::character varying,
par_account_id integer = NULL::integer,
par_account_name varchar = NULL::character varying,
out returncode integer
```

## PostgreSQL에서 SQL Server Database Mail을 에뮬레이션하는 프로시저 사용 예제
<a name="CHAP_Source.SQLServer.ToPostgreSQL.ExtensionPack.Mail.Examples"></a>

이메일을 보내려면 다음과 같이 `aws_sqlserver_ext.sp_send_dbmail` 프로시저를 사용합니다.

```
PERFORM sp_send_dbmail (
    par_profile_name := 'Administrator',
    par_recipients := 'hello@rusgl.info',
    par_subject := 'Automated Success Message',
    par_body := 'The stored procedure finished'
);
```

다음 예제는 쿼리 결과가 포함된 이메일을 전송하는 방법을 보여줍니다.

```
PERFORM sp_send_dbmail (
    par_profile_name := 'Administrator',
    par_recipients := 'hello@rusgl.info',
    par_subject := 'Account with id = 1',
    par_query := 'SELECT COUNT(*)FROM Account WHERE id = 1'
);
```

다음 예제는 HTML 코드가 포함된 이메일을 전송하는 방법을 보여줍니다.

```
DECLARE var_tableHTML TEXT;
SET var_tableHTML := CONCAT(
    '<H1>Work Order Report</H1>',
    '<table border="1">',
    '<tr><th>Work Order ID</th><th>Product ID</th>',
    '<th>Name</th><th>Order Qty</th><th>Due Date</th>',
    '<th>Expected Revenue</th></tr>',
    '</table>'
);
PERFORM sp_send_dbmail (
    par_recipients := 'hello@rusgl.info',
    par_subject := 'Work Order List',
    par_body := var_tableHTML,
    par_body_format := 'HTML'
);
```

이메일을 삭제하려면 다음과 같이 `aws_sqlserver_ext.sysmail_delete_mailitems_sp` 프로시저를 사용합니다.

```
DECLARE var_GETDATE datetime;
SET var_GETDATE = NOW();
PERFORM sysmail_delete_mailitems_sp (
    par_sent_before := var_GETDATE
);
```

다음 예제는 가장 오래된 이메일을 삭제하는 방법을 보여줍니다.

```
PERFORM sysmail_delete_mailitems_sp (
    par_sent_before := '31.12.2015'
);
```

다음 예제는 전송할 수 없는 모든 이메일을 삭제하는 방법을 보여줍니다.

```
PERFORM sysmail_delete_mailitems_sp (
    par_sent_status := 'failed'
);
```

새 사용자 프로필을 생성하려면 다음과 같이 `aws_sqlserver_ext.sysmail_add_profile_sp` 프로시저를 사용합니다.

```
PERFORM sysmail_add_profile_sp (
    profile_name := 'Administrator',
    par_description := 'administrative mail'
);
```

다음 예제는 새 프로필을 생성하고 고유한 프로필 식별자를 변수로 저장하는 방법을 보여줍니다.

```
DECLARE var_profileId INT;
SELECT par_profile_id
    FROM sysmail_add_profile_sp (
        profile_name := 'Administrator',
        par_description := ' Profile used for administrative mail.')
    INTO var_profileId;
    
SELECT var_profileId;
```

새 이메일 계정을 생성하려면 다음과 같이 `aws_sqlserver_ext.sysmail_add_account_sp` 프로시저를 사용합니다.

```
PERFORM sysmail_add_account_sp (
    par_account_name :='Audit Account',
    par_email_address := 'dba@rusgl.info',
    par_display_name := 'Test Automated Mailer',
    par_description := 'Account for administrative e-mail.',
    par_mailserver_type := 'AWSLAMBDA'
    par_mailserver_name := 'arn:aws:lambda:us-west-2:555555555555:function:pg_v3'
);
```

사용자 프로필에 이메일 계정을 추가하려면 다음과 같이 `aws_sqlserver_ext.sysmail_add_profileaccount_sp` 프로시저를 사용합니다.

```
PERFORM sysmail_add_profileaccount_sp (
    par_account_name := 'Administrator',
    par_account_name := 'Audit Account',
    par_sequence_number := 1
);
```

## PostgreSQL에서 SQL Server Database Mail을 에뮬레이션하기 위한 사용 사례 예제
<a name="CHAP_Source.SQLServer.ToPostgreSQL.ExtensionPack.Mail.UseCases"></a>

소스 데이터베이스 코드가 SQL Server Database Mail을 사용하여 이메일을 보내는 경우 AWS SCT 확장 팩을 사용하여이 코드를 PostgreSQL로 변환할 수 있습니다.

**PostgreSQL 데이터베이스에서 이메일을 보내려면**

1.  AWS Lambda 함수를 생성하고 구성합니다.

1.  AWS SCT 확장 팩을 적용합니다.

1. 다음과 같이 `sysmail_add_profile_sp` 함수를 사용하여 사용자 프로필을 생성합니다.

1. 다음과 같이 `sysmail_add_account_sp` 함수를 사용하여 이메일 계정을 생성합니다.

1. 다음과 같이 `sysmail_add_profileaccount_sp` 함수를 사용하여 이 이메일 계정을 사용자 프로필에 추가합니다.

   ```
   CREATE OR REPLACE FUNCTION aws_sqlserver_ext.
   proc_dbmail_settings_msdb()
   RETURNS void
   AS
   $BODY$
   BEGIN
   PERFORM aws_sqlserver_ext.sysmail_add_profile_sp(
       par_profile_name := 'Administrator',
       par_description := 'administrative mail'
   );
   PERFORM aws_sqlserver_ext.sysmail_add_account_sp(
       par_account_name := 'Audit Account',
       par_description := 'Account for administrative e-mail.',
       par_email_address := 'dba@rusgl.info',
       par_display_name := 'Test Automated Mailer',
       par_mailserver_type := 'AWSLAMBDA'
       par_mailserver_name := 'your_ARN'
   );
   PERFORM aws_sqlserver_ext.sysmail_add_profileaccount_sp(
       par_profile_name := 'Administrator',
       par_account_name := 'Audit Account',
       par_sequence_number := 1
   );
   END;
   $BODY$
   LANGUAGE plpgsql;
   ```

1. 다음과 같이 `sp_send_dbmail` 함수를 사용하여 이메일을 보냅니다.

   ```
   CREATE OR REPLACE FUNCTION aws_sqlserver_ext.
   proc_dbmail_send_msdb()
   RETURNS void
   AS
   $BODY$
   BEGIN
   PERFORM aws_sqlserver_ext.sp_send_dbmail(
       par_profile_name := 'Administrator',
       par_recipients := 'hello@rusgl.info',
       par_body := 'The stored procedure finished',
       par_subject := 'Automated Success Message'
   );
   END;
   $BODY$
   LANGUAGE plpgsql;
   ```

모든 사용자 프로필에 대한 정보를 보려면 다음과 같이 `sysmail_help_profile_sp` 프로시저를 사용합니다.

```
SELECT FROM aws_sqlserver_ext.sysmail_help_profile_sp();
```

다음 예제는 특정 사용자 프로필에 대한 정보를 표시합니다.

```
select from aws_sqlserver_ext.sysmail_help_profile_sp(par_profile_id := 1);
select from aws_sqlserver_ext.sysmail_help_profile_sp(par_profile_name := 'Administrator');
```

모든 이메일 계정에 대한 정보를 보려면 다음과 같이 `sysmail_help_account_sp` 프로시저를 사용합니다.

```
select from aws_sqlserver_ext.sysmail_help_account_sp();
```

다음 예제는 특정 이메일 계정에 대한 정보를 표시합니다.

```
select from aws_sqlserver_ext.sysmail_help_account_sp(par_account_id := 1);
select from aws_sqlserver_ext.sysmail_help_account_sp(par_account_name := 'Audit Account');
```

사용자 프로필과 연결된 모든 이메일 계정에 대한 정보를 보려면 다음과 같이 `sysmail_help_profileaccount_sp` 프로시저를 사용합니다.

```
select from aws_sqlserver_ext.sysmail_help_profileaccount_sp();
```

다음 예제는 식별자, 프로필 이름 또는 계정 이름을 기준으로 레코드를 필터링합니다.

```
select from aws_sqlserver_ext.sysmail_help_profileaccount_sp(par_profile_id := 1);
select from aws_sqlserver_ext.sysmail_help_profileaccount_sp(par_profile_id := 1, par_account_id := 1);
select from aws_sqlserver_ext.sysmail_help_profileaccount_sp(par_profile_name := 'Administrator');
select from aws_sqlserver_ext.sysmail_help_profileaccount_sp(par_account_name := 'Audit Account');
```

사용자 프로필 이름 또는 설명을 변경하려면 다음과 같이 `sysmail_update_profile_sp` 프로시저를 사용합니다.

```
select aws_sqlserver_ext.sysmail_update_profile_sp(
    par_profile_id := 2,
    par_profile_name := 'New profile name'
);
```

이메일 계정 설정을 변경하려면 다음과 같이 `ysmail_update_account_sp` 프로시저를 사용합니다.

```
select from aws_sqlserver_ext.sysmail_update_account_sp (
    par_account_name := 'Audit Account',
    par_mailserver_name := 'arn:aws:lambda:region:XXXXXXXXXXXX:function:func_test',
    par_mailserver_type := 'AWSLAMBDA'
);
```