使用 AWS SCT 擴展包在 Postgre 中模擬SQL服務器數據庫郵件 SQL - AWS Schema Conversion Tool

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 AWS SCT 擴展包在 Postgre 中模擬SQL服務器數據庫郵件 SQL

您可以使用SQL伺服器資料庫郵件,從SQL伺服器資料庫引擎或 Azure SQL 受控執行個體傳送電子郵件給使用者。這些電子郵件訊息可以包含查詢結果,或包含來自網路上任何資源的檔案。如需SQL伺服器資料庫郵件的詳細資訊,請參閱 Microsoft 技術文件。

Postgre SQL 沒有SQL服務器數據庫郵件的等價物。若要模擬SQL伺服器資料庫郵件功能,請 AWS SCT 建立延伸套件。此擴展包使用 AWS Lambda 和 Amazon 簡單電子郵件服務(AmazonSES)。 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;

在前面的例子中,ARN 是你ARN的 Lambda 函數。

若要模擬 Postgre 中的SQL伺服器資料庫郵件行為SQL, AWS SCT 擴充套件會使用下列表格、檢視和程序。

在 Postgre 中模擬SQL服務器數據庫郵件的表 SQL

若要模擬SQL伺服器資料庫郵件,擴充套件會使用下列表格:

系統郵件帳戶

儲存電子郵件帳戶的相關資訊。

系統設定檔

儲存使用者設定檔的相關資訊。

系統郵件伺服器

儲存有關電子郵件伺服器的資訊。

系統郵件項目

儲存電子郵件訊息的清單。

系統郵件附件

每個電子郵件附件都包含一個資料列。

系統郵件日誌

儲存有關傳送電子郵件訊息的服務資訊。

系統設定檔帳戶

儲存使用者設定檔和電子郵件帳戶的相關資訊。

在 Postgre 中模擬SQL服務器數據庫郵件的視圖 SQL

若要模擬SQL伺服器資料庫郵件,請在 Postgre 資料SQL庫中 AWS SCT 建立下列檢視,以確保相容性。擴展包不使用它們,但轉換後的代碼可以查詢這些視圖。

sysmail_allitems

包括所有電子郵件的列表。

sysmail_faileditems

包括無法發送的電子郵件列表。

sysmail_sentitems

包括已傳送的電子郵件清單。

sysmail_unsentitems

包括尚未發送的電子郵件列表。

sysmail_mailattachments

包括附加檔案的清單。

在 Postgre 中模擬SQL服務器數據庫郵件的過程 SQL

若要模擬SQL伺服器資料庫郵件,擴充套件會使用下列程序:

sp_send_dbmail

傳送電子郵件給指定的收件者。

sysmail_add_profile_sp

建立新的使用者設定檔。

sysmail_add_account_sp

建立新的電子郵件帳戶,以儲存簡易郵件傳送通訊協定 (SMTP) 認證等資訊。

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

顯示與使用者設定檔關聯之電子郵件帳戶的相關資訊

数据库邮件

產生函數JSON要求的內部程 AWS Lambda 序。

系統驗證設定檔 SP, 系統郵件驗證帳戶 SP, 系統郵件驗證位址

檢查設定的內部程序。

SP_ 獲取數據庫郵件,SP_SET_ 數據庫郵件,系統郵件

已淘汰的內部程序。

在 Postgre 中模擬SQL伺服器資料庫郵件的程序的語法 SQL

延伸套件中的aws_sqlserver_ext.sp_send_dbmail程序會模擬程msdb.dbo.sp_send_dbmail序。如需來源SQL伺服器資料庫郵件程序的詳細資訊,請參閱 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伺服器資料庫郵件程序的詳細資訊,請參閱 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伺服器資料庫郵件程序的詳細資訊,請參閱 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伺服器資料庫郵件程序的詳細資訊,請參閱 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伺服器資料庫郵件程序的詳細資訊,請參閱 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伺服器資料庫郵件程序的詳細資訊,請參閱 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伺服器資料庫郵件程序的詳細資訊,請參閱 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伺服器資料庫郵件程序的詳細資訊,請參閱 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伺服器資料庫郵件程序的詳細資訊,請參閱 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伺服器資料庫郵件程序的詳細資訊,請參閱 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伺服器資料庫郵件程序的詳細資訊,請參閱 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伺服器資料庫郵件程序的詳細資訊,請參閱 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伺服器資料庫郵件程序的詳細資訊,請參閱 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伺服器資料庫郵件程序的詳細資訊,請參閱 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

在 Postgre 中使用模擬SQL伺服器資料庫郵件的程序的範例 SQL

若要傳送電子郵件,請使用下列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 );

在 Postgre 中模擬服SQL務器數據庫郵件的用例示例 SQL

如果您的源數據庫代碼使用SQL服務器數據庫郵件發送電子郵件,則可以使用 AWS SCT 擴展包將此代碼轉換為 Postgre SQL。

從您的 Postgre SQL 資料庫傳送電子郵件
  1. 創建和配置您的 AWS Lambda 功能。

  2. 套用 AWS SCT 擴充套件。

  3. 使用如下圖所示的sysmail_add_profile_sp功能創建用戶配置文件。

  4. 使用sysmail_add_account_sp功能創建一個電子郵件帳戶,如下圖所示。

  5. 使用功能將此電子郵件帳戶添加到您的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;
  6. 使用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' );