AWS SCT 확장 팩을 사용하여 PostgreSQL에서 SQL Server Database Mail 에뮬레이션
SQL Server Database Mail을 사용하여 SQL Server 데이터베이스 엔진 또는 Azure SQL Managed Instance에서 사용자에게 이메일 메시지를 보낼 수 있습니다. 이러한 이메일 메시지는 쿼리 결과를 포함하거나 네트워크에 있는 리소스의 파일을 포함할 수 있습니다. SQL Server Database Mail에 대한 자세한 내용은 Microsoft 기술 문서
PostgreSQL은 SQL Server Database Mail과 동일한 기능을 제공하지 않습니다. SQL Server Database Mail 기능을 에뮬레이션하기 위해 AWS SCT는 확장 팩을 생성합니다. 이 확장 팩은 AWS Lambda와 Amazon Simple Email Service(Amazon SES)를 사용합니다. AWS Lambda는 Amazon SES 이메일 전송 서비스와 상호 작용할 수 있는 인터페이스를 사용자에게 제공합니다. 이 상호 작용을 설정하려면 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;
이전 예제에서
은 Lambda 함수의 ARN입니다.ARN
PostgreSQL에서 SQL Server Database Mail 동작을 에뮬레이션하기 위해 AWS SCT 확장 팩은 다음과 같은 테이블, 보기 및 프로시저를 사용합니다.
PostgreSQL에서 SQL Server Database Mail을 에뮬레이션하는 테이블
SQL Server Database Mail을 에뮬레이션하기 위해 확장 팩은 다음 테이블을 사용합니다.
- sysmail_account
이메일 계정에 대한 정보를 저장합니다.
- sysmail_profile
사용자 프로필에 대한 정보를 저장합니다.
- sysmail_server
이메일 서버에 대한 정보를 저장합니다.
- sysmail_mailitems
이메일 메시지 목록을 저장합니다.
- sysmail_attachment
각 이메일 첨부 파일마다 하나의 행을 포함합니다.
- sysmail_log
이메일 메시지 전송에 대한 서비스 정보를 저장합니다.
- sysmail_profileaccount
사용자 프로필 및 이메일 계정에 대한 정보를 저장합니다.
PostgreSQL에서 SQL Server Database Mail을 에뮬레이션하는 보기
SQL Server Database Mail을 에뮬레이션하기 위해 AWS SCT는 PostgreSQL 데이터베이스에서 다음과 같은 보기를 생성하여 호환성을 보장합니다. 확장 팩에서는 이러한 보기를 사용하지 않지만 변환된 코드는 이러한 보기를 쿼리할 수 있습니다.
- sysmail_allitems
모든 이메일 목록이 포함됩니다.
- sysmail_faileditems
전송할 수 없는 이메일 목록이 포함됩니다.
- sysmail_sentitems
보낸 이메일 목록이 포함됩니다.
- sysmail_unsentitems
아직 전송되지 않은 이메일 목록이 포함됩니다.
- sysmail_mailattachments
첨부 파일 목록이 포함됩니다.
PostgreSQL에서 SQL Server Database Mail을 에뮬레이션하는 프로시저
SQL Server Database Mail을 에뮬레이션하기 위해 확장 팩은 다음 프로시저를 사용합니다.
- sp_send_dbmail
지정된 수신자에게 이메일을 보냅니다.
- sysmail_add_profile_sp
새 사용자 프로필을 생성합니다.
- sysmail_add_account_sp
SMTP(Simple Mail Transfer Protocol) 보안 인증 정보 등과 같은 정보를 저장하는 새로운 이메일 계정을 생성합니다.
- sysmail_add_profileaccount_sp
지정된 사용자 프로필에 이메일 계정을 추가합니다.
- sysmail_update_profile_sp
설명, 이름 등과 같은 사용자 프로필의 속성을 변경합니다.
- sysmail_update_account_sp
기존 이메일 계정의 정보를 변경합니다.
- sysmail_update_profileaccount_sp
지정된 사용자 프로필의 이메일 계정 정보를 업데이트합니다.
- sysmail_delete_profileaccount_sp
지정된 사용자 프로필에서 이메일 계정을 제거합니다.
- sysmail_delete_account_sp
이메일 계정을 삭제합니다.
- sysmail_delete_profile_sp
사용자 프로필을 삭제합니다.
- sysmail_delete_mailitems_sp
내부 테이블에서 이메일을 삭제합니다.
- sysmail_help_profile_sp
사용자 프로필에 대한 정보를 표시합니다.
- sysmail_help_account_sp
이메일 계정에 대한 정보를 표시합니다.
- sysmail_help_profileaccount_sp
사용자 프로필과 연결된 이메일 계정 관련 정보를 표시합니다.
- sysmail_dbmail_json
AWS Lambda 함수에 대한 JSON 요청을 생성하는 내부 프로시저입니다.
- sysmail_verify_profile_sp, sysmail_verify_account_sp, sysmail_verify_addressparams_sp
설정을 확인하는 내부 프로시저입니다.
- sp_get_dbmail, sp_set_dbmail, sysmail_dbmail_xml
더 이상 사용되지 않는 내부 프로시저입니다.
PostgreSQL에서 SQL Server Database Mail을 에뮬레이션하는 프로시저의 구문
확장 팩의 aws_sqlserver_ext.sp_send_dbmail
프로시저는 msdb.dbo.sp_send_dbmail
프로시저를 에뮬레이션합니다. 소스 SQL Server Database Mail 프로시저에 대한 자세한 내용은 Microsoft 기술 문서
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 기술 문서
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 기술 문서
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 기술 문서
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 기술 문서
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 기술 문서
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 기술 문서
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 기술 문서
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 기술 문서
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 기술 문서
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 기술 문서
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 기술 문서
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 기술 문서
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 기술 문서
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을 에뮬레이션하는 프로시저 사용 예제
이메일을 보내려면 다음과 같이 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을 에뮬레이션하기 위한 사용 사례 예제
소스 데이터베이스 코드에서 SQL Server Database Mail을 사용하여 이메일을 전송하는 경우 AWS SCT 확장 팩을 사용하여 이 코드를 PostgreSQL로 변환할 수 있습니다.
PostgreSQL 데이터베이스에서 이메일을 보내려면
-
AWS Lambda 함수를 생성 및 구성합니다.
-
AWS SCT 확장 팩을 적용합니다.
-
다음과 같이
sysmail_add_profile_sp
함수를 사용하여 사용자 프로필을 생성합니다. -
다음과 같이
sysmail_add_account_sp
함수를 사용하여 이메일 계정을 생성합니다. -
다음과 같이
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;
-
다음과 같이
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' );