

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Migrasi dari SQL Server ke PostgreSQL dengan AWS Schema Conversion Tool
<a name="CHAP_Source.SQLServer.ToPostgreSQL"></a>

Anda dapat menggunakan SQL Server untuk paket ekstensi PostgreSQL di. AWS SCT Paket ekstensi ini mengemulasi fungsi database SQL Server dalam kode PostgreSQL yang dikonversi. Gunakan paket ekstensi SQL Server ke PostgreSQL untuk meniru SQL Server Agent dan SQL Server Database Mail. Untuk informasi selengkapnya tentang paket ekstensi, lihat[Menggunakan paket ekstensi dengan AWS Schema Conversion Tool](CHAP_ExtensionPack.md). 

**Topics**
+ [Hak istimewa untuk PostgreSQL sebagai database target](#CHAP_Source.SQLServer.ToPostgreSQL.ConfigurePostgreSQL)
+ [SQL Server ke pengaturan konversi PostgreSQL](#CHAP_Source.SQLServer.ToPostgreSQL.ConversionSettings)
+ [Mengkonversi partisi SQL Server ke PostgreSQL versi 10 partisi](#CHAP_Source.SQLServer.ToPostgreSQL.PG10Partitions)
+ [Pertimbangan migrasi](#CHAP_Source.SQLServer.ToPostgreSQL.MigrationConsiderations)
+ [Menggunakan paket AWS SCT ekstensi untuk meniru SQL Server Agent di PostgreSQL](CHAP_Source.SQLServer.ToPostgreSQL.ExtensionPack.Agent.md)
+ [Menggunakan paket AWS SCT ekstensi untuk meniru SQL Server Database Mail di PostgreSQL](CHAP_Source.SQLServer.ToPostgreSQL.ExtensionPack.Mail.md)

## Hak istimewa untuk PostgreSQL sebagai database target
<a name="CHAP_Source.SQLServer.ToPostgreSQL.ConfigurePostgreSQL"></a>

Untuk menggunakan PostgreSQL sebagai target, membutuhkan hak istimewa. AWS SCT `CREATE ON DATABASE` Pastikan Anda memberikan hak istimewa ini untuk setiap database PostgreSQL target.

Untuk menggunakan sinonim publik yang dikonversi, ubah jalur pencarian default database menjadi`"$user", public_synonyms, public`.

Anda dapat menggunakan contoh kode berikut untuk membuat pengguna database dan memberikan hak istimewa.

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

Pada contoh sebelumnya, ganti *user\$1name* dengan nama pengguna Anda. Kemudian, ganti *db\$1name* dengan nama database target Anda. Akhirnya, ganti *your\$1password* dengan kata sandi yang aman.

Di PostgreSQL, hanya pemilik skema atau a yang dapat menjatuhkan skema. `superuser` Pemilik dapat menjatuhkan skema dan semua objek yang disertakan skema ini bahkan jika pemilik skema tidak memiliki beberapa objeknya.

Saat Anda menggunakan pengguna yang berbeda untuk mengonversi dan menerapkan skema yang berbeda ke basis data target Anda, Anda bisa mendapatkan pesan kesalahan saat tidak AWS SCT dapat menjatuhkan skema. Untuk menghindari pesan kesalahan ini, gunakan `superuser` peran. 

## SQL Server ke pengaturan konversi PostgreSQL
<a name="CHAP_Source.SQLServer.ToPostgreSQL.ConversionSettings"></a>

**Untuk mengedit SQL Server ke pengaturan konversi PostgreSQL, pilih Pengaturan, lalu **pilih** Pengaturan konversi.** Dari daftar atas, pilih **SQL Server, lalu pilih SQL Server** - **PostgreSQL**. AWS SCT menampilkan semua pengaturan yang tersedia untuk konversi SQL Server ke PostgreSQL.

Pengaturan AWS SCT konversi SQL Server ke PostgreSQL di menyertakan opsi untuk hal berikut:
+ Untuk membatasi jumlah komentar dengan item tindakan dalam kode yang dikonversi.

  Untuk **Tambahkan komentar di kode yang dikonversi untuk item tindakan dengan tingkat keparahan yang dipilih dan lebih tinggi**, pilih tingkat keparahan item tindakan. AWS SCT menambahkan komentar dalam kode yang dikonversi untuk item tindakan dengan tingkat keparahan yang dipilih dan lebih tinggi.

  Misalnya, untuk meminimalkan jumlah komentar dalam kode yang dikonversi, pilih **Error only**. Untuk menyertakan komentar untuk semua item tindakan dalam kode yang dikonversi, pilih **Semua pesan**.
+ Untuk memungkinkan untuk menggunakan indeks dengan nama yang sama dalam tabel yang berbeda di SQL Server.

  Di PostgreSQL, semua nama indeks yang Anda gunakan dalam skema, harus unik. Untuk memastikan bahwa AWS SCT menghasilkan nama unik untuk semua indeks Anda, pilih **Hasilkan nama unik untuk indeks**.
+ Untuk mengkonversi prosedur SQL Server ke fungsi PostgreSQL.

  PostgreSQL versi 10 dan sebelumnya tidak mendukung prosedur. Untuk pelanggan yang tidak terbiasa menggunakan prosedur di PostgreSQL AWS SCT , dapat mengonversi prosedur ke fungsi. Untuk melakukannya, pilih **Konversi prosedur ke fungsi**.
+ Untuk meniru output `EXEC` dalam tabel.

  Database SQL Server sumber Anda dapat menyimpan output `EXEC` dalam tabel. AWS SCT membuat tabel sementara dan prosedur tambahan untuk meniru fitur ini. Untuk menggunakan emulasi ini, pilih **Buat rutinitas tambahan untuk menangani kumpulan data terbuka**.
+ Untuk menentukan template yang akan digunakan untuk nama skema dalam kode yang dikonversi. Untuk **templat pembuatan nama Skema**, pilih salah satu opsi berikut:
  + ****<source\$1db>— Menggunakan nama database SQL Server sebagai nama skema di PostgreSQL.
  + ****<source\$1schema>— Menggunakan nama skema SQL Server sebagai nama skema di PostgreSQL.
  + **\$1** <source\$1db><schema>— Menggunakan kombinasi database SQL Server dan nama skema sebagai nama skema di PostgreSQL.
+ Untuk menyimpan huruf huruf nama objek sumber Anda.

  Untuk menghindari konversi nama objek ke huruf kecil, pilih **Hindari casting ke huruf kecil untuk operasi peka huruf kecil**. Opsi ini hanya berlaku ketika Anda mengaktifkan opsi sensitivitas kasus di basis data target Anda.
+ Untuk menyimpan nama parameter dari database sumber Anda.

  Untuk menambahkan tanda kutip ganda ke nama parameter dalam kode yang dikonversi, pilih **Simpan nama parameter asli**.

## Mengkonversi partisi SQL Server ke PostgreSQL versi 10 partisi
<a name="CHAP_Source.SQLServer.ToPostgreSQL.PG10Partitions"></a>

Saat Anda mengonversi database Microsoft SQL Server ke Amazon Aurora PostgreSQL Compatible Edition (Aurora PostgreSQL) atau Amazon Relational Database Service untuk PostgreSQL (Amazon RDS for PostgreSQL), perhatikan hal-hal berikut.

Di SQL Server, Anda membuat partisi dengan fungsi partisi. Saat mengonversi dari tabel porsi SQL Server ke tabel partisi PostgreSQL versi 10, perhatikan beberapa masalah potensial:
+ SQL Server memungkinkan Anda untuk partisi tabel menggunakan kolom tanpa kendala NOT NULL. Dalam hal ini, semua nilai NULL pergi ke partisi paling kiri. PostgreSQL tidak mendukung nilai NULL untuk partisi RANGE.
+ SQL Server memungkinkan Anda membuat kunci primer dan unik untuk tabel yang dipartisi. Untuk PostgreSQL, Anda membuat kunci primer atau unik untuk setiap partisi secara langsung. Dengan demikian, kendala PRIMARY atau UNIQUE KEY harus dihapus dari tabel induknya saat bermigrasi ke PostgreSQL. Nama kunci yang dihasilkan mengambil format`<original_key_name>_<partition_number>`.
+ SQL Server memungkinkan Anda membuat batasan kunci asing dari dan ke tabel yang dipartisi. PostgreSQL tidak mendukung kunci asing yang mereferensikan tabel yang dipartisi. Juga, PostgreSQL tidak mendukung referensi kunci asing dari tabel yang dipartisi ke tabel lain.
+ SQL Server memungkinkan Anda membuat indeks untuk tabel yang dipartisi. Untuk PostgreSQL, indeks harus dibuat untuk setiap partisi secara langsung. Dengan demikian, indeks harus dihapus dari tabel induknya saat bermigrasi ke PostgreSQL. Nama indeks yang dihasilkan mengambil format`<original_index_name>_<partition_number>`.
+  PostgreSQL tidak mendukung indeks yang dipartisi.

## Pertimbangan migrasi
<a name="CHAP_Source.SQLServer.ToPostgreSQL.MigrationConsiderations"></a>

Beberapa hal yang perlu dipertimbangkan saat memigrasikan skema SQL Server ke PostgreSQL: 
+ Dalam PostgreSQL, semua nama objek dalam skema harus unik, termasuk indeks. Nama indeks harus unik dalam skema tabel dasar. Di SQL Server, nama indeks bisa sama untuk tabel yang berbeda.

  Untuk memastikan keunikan nama indeks, AWS SCT memberi Anda opsi untuk menghasilkan nama indeks unik jika nama indeks Anda tidak unik. Untuk melakukan ini, pilih opsi **Menghasilkan nama indeks unik** di properti proyek. Secara default, opsi ini diaktifkan. Jika opsi ini diaktifkan, nama indeks unik dibuat menggunakan format IX\$1TABLE\$1NAME\$1INDEX\$1NAME. Jika opsi ini dinonaktifkan, nama indeks tidak diubah.
+ Pernyataan GOTO dan label dapat digunakan untuk mengubah urutan pernyataan dijalankan. Setiap pernyataan Transact-SQL yang mengikuti pernyataan GOTO dilewati dan pemrosesan berlanjut pada label. Pernyataan dan label GOTO dapat digunakan di mana saja dalam prosedur, batch, atau blok pernyataan. Pernyataan GOTO juga dapat disarangkan.

  PostgreSQL tidak menggunakan pernyataan GOTO. Ketika AWS SCT mengkonversi kode yang berisi pernyataan GOTO, itu mengubah pernyataan untuk menggunakan pernyataan BEGIN... END atau LOOP... END LOOP. Anda dapat menemukan contoh bagaimana AWS SCT mengkonversi pernyataan GOTO dalam tabel berikut.  
**Pernyataan SQL Server GOTO dan pernyataan PostgreSQL dikonversi**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/SchemaConversionTool/latest/userguide/CHAP_Source.SQLServer.ToPostgreSQL.html)
+ PostgreSQL tidak mendukung pernyataan MERGE. AWS SCT mengemulasi perilaku pernyataan MERGE dengan cara berikut:
  + Dengan INSERT ON CONFLICT konstruksi.
  + Dengan menggunakan pernyataan UPDATE FROM DHTML, seperti MERGE tanpa klausa WHEN NOT MATCHED.
  + Dengan menggunakan CURSOR, seperti dengan klausa MERGE dengan DELETE atau dengan menggunakan pernyataan kondisi MERGE ON yang kompleks.
+ AWS SCT dapat menambahkan pemicu database ke pohon objek saat Amazon RDS adalah targetnya.
+ AWS SCT dapat menambahkan pemicu tingkat server ke pohon objek saat Amazon RDS adalah targetnya.
+ SQL Server secara otomatis membuat dan mengelola `deleted` dan `inserted` tabel. Anda dapat menggunakan tabel sementara, memori-residen ini untuk menguji efek modifikasi data tertentu dan untuk mengatur kondisi untuk tindakan pemicu DML. AWS SCT dapat mengonversi penggunaan tabel ini di dalam pernyataan pemicu DML.
+ AWS SCT dapat menambahkan server tertaut ke pohon objek saat Amazon RDS adalah targetnya.
+ Saat bermigrasi dari Microsoft SQL Server ke PostgreSQL, fungsi SUSER\$1SNAME bawaan dikonversi sebagai berikut:
  + SUSER\$1SNAME — Mengembalikan nama login yang terkait dengan nomor identifikasi keamanan (SID).
  + SUSER\$1SNAME (<server\$1user\$1sid>) - Tidak didukung.
  + SUSER\$1SNAME () CURRENT\$1USER — Mengembalikan nama pengguna dari konteks eksekusi saat ini.
  + SUSER\$1SNAME (NULL) - Mengembalikan NULL.
+ Mengonversi fungsi bernilai tabel didukung. Fungsi bernilai tabel mengembalikan tabel dan dapat menggantikan tabel dalam kueri.
+ PATINDEX mengembalikan posisi awal kemunculan pertama pola dalam ekspresi tertentu pada semua tipe data teks dan karakter yang valid. Ia mengembalikan nol jika pola tidak ditemukan. <pattern character><expression character varying>Saat mengonversi dari SQL Server ke Amazon RDS for AWS SCT PostgreSQL, ganti kode aplikasi yang menggunakan PATINDEX dengan aws\$1sqlserver\$1ext.patindex (,).
+ Di SQL Server, tipe tabel yang ditentukan pengguna adalah tipe yang mewakili definisi struktur tabel. Anda menggunakan tipe tabel yang ditentukan pengguna untuk mendeklarasikan parameter nilai tabel untuk prosedur atau fungsi yang disimpan. Anda juga dapat menggunakan tipe tabel yang ditentukan pengguna untuk mendeklarasikan variabel tabel yang ingin Anda gunakan dalam batch atau dalam badan prosedur atau fungsi yang disimpan. AWS SCT meniru jenis ini di PostgreSQL dengan membuat tabel sementara.

Saat mengonversi dari SQL Server ke PostgreSQL, AWS SCT mengubah objek sistem SQL Server menjadi objek yang dapat dikenali di PostgreSQL. Tabel berikut menunjukkan bagaimana objek sistem dikonversi. 

 


| Kasus penggunaan MS SQL Server | Substitusi PostgreSQL | 
| --- | --- | 
| SYS.SKEMA | AWS\$1SQLSERVER\$1EXT.SYS\$1SKEMA | 
| SYS.TABLES | AWS\$1SQLSERVER\$1EXT.SYS\$1TABLES | 
| SYS.PANDANGAN | AWS\$1SQLSERVER\$1EXT.SYS\$1DILIHAT | 
| SYS.ALL\$1VIEWS | AWS\$1SQLSERVER\$1EXT.SYS\$1ALL\$1VIEWS | 
| SYS.JENIS | 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\$1KENDALA | AWS\$1SQLSERVER\$1EXT.SYS\$1KEY\$1KENDALA | 
| SYS.IDENTITY\$1COLUMNS | AWS\$1SQLSERVER\$1EXT.SYS\$1IDENTITY\$1COLUMNS | 
| SYS.PROSEDUR | AWS\$1SQLSERVER\$1EXT.SYS\$1PROSEDUR | 
| SYS.INDEXES | AWS\$1SQLSERVER\$1EXT.SYS\$1INDEXES | 
| SYS.SYSINDEX | 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.DATABASE | AWS\$1SQLSERVER\$1EXT.SYS\$1DATABASE | 
| 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\$1KENDALA | 
| 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\$1RUTINES | 
| SYS.SYSPROCESSES | AWS\$1SQLSERVER\$1EXT.SYS\$1SYSPROCESSS | 
| sys.system\$1objects | AWS\$1SQLSERVER\$1EXT.SYS\$1SYSTEM\$1OBJECTS | 

# Menggunakan paket AWS SCT ekstensi untuk meniru SQL Server Agent di PostgreSQL
<a name="CHAP_Source.SQLServer.ToPostgreSQL.ExtensionPack.Agent"></a>

SQL Server Agent adalah layanan Microsoft Windows yang menjalankan pekerjaan SQL Server. SQL Server Agent menjalankan pekerjaan sesuai jadwal, sebagai respons terhadap acara tertentu, atau sesuai permintaan. Untuk informasi selengkapnya tentang Agen SQL Server, lihat [dokumentasi teknis Microsoft](https://docs.microsoft.com/en-us/sql/ssms/agent/sql-server-agent?view=sql-server-ver15).

PostgreSQL tidak memiliki setara untuk SQL Server Agent. Untuk meniru fitur SQL Server Agent, AWS SCT buat paket ekstensi. Paket ekstensi ini menggunakan AWS Lambda dan Amazon CloudWatch. AWS Lambda mengimplementasikan antarmuka yang Anda gunakan untuk mengelola jadwal dan menjalankan pekerjaan. Amazon CloudWatch mempertahankan aturan jadwal.

AWS Lambda dan Amazon CloudWatch menggunakan parameter JSON untuk berinteraksi. Parameter JSON ini memiliki struktur sebagai berikut.

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

Dalam contoh sebelumnya, *`mode`* adalah jenis tugas dan `list of parameters` merupakan seperangkat parameter yang bergantung pada jenis tugas. Juga, `procedure name` adalah nama prosedur yang berjalan setelah tugas selesai.

AWS SCT menggunakan satu fungsi Lambda untuk mengontrol dan menjalankan pekerjaan. CloudWatch Aturan memulai menjalankan pekerjaan dan memberikan informasi yang diperlukan untuk memulai pekerjaan. Ketika CloudWatch aturan dipicu, itu memulai fungsi Lambda menggunakan parameter dari aturan.

Untuk membuat pekerjaan sederhana yang memanggil prosedur, gunakan format berikut.

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

Untuk membuat pekerjaan dengan beberapa langkah, gunakan format berikut.

```
{
    "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
        },
        ...
]
}
```

Untuk meniru perilaku Agen SQL Server di PostgreSQL, paket AWS SCT ekstensi juga membuat tabel dan prosedur berikut.

## Tabel yang meniru SQL Server Agent di PostgreSQL
<a name="CHAP_Source.SQLServer.ToPostgreSQL.ExtensionPack.Agent.Tables"></a>

Untuk meniru SQL Server Agent, paket ekstensi menggunakan tabel berikut:

**sysjobs**  
Menyimpan informasi tentang pekerjaan.

**sysjobsteps**  
Menyimpan informasi tentang langkah-langkah pekerjaan.

**sysschedules**  
Menyimpan informasi tentang jadwal pekerjaan.

**jadwal sysjob**  
Menyimpan informasi jadwal untuk pekerjaan individu. 

**sysjobhistory**  
Menyimpan informasi tentang menjalankan pekerjaan terjadwal.

## Prosedur yang meniru SQL Server Agent di PostgreSQL
<a name="CHAP_Source.SQLServer.ToPostgreSQL.ExtensionPack.Agent.Procedures"></a>

Untuk meniru SQL Server Agent, paket ekstensi menggunakan prosedur berikut:

**sp\$1add\$1pekerjaan**  
Menambahkan pekerjaan baru.

**sp\$1add\$1jobstep**  
Menambahkan langkah ke pekerjaan.

**sp\$1add\$1schedule**  
Membuat aturan jadwal baru di Amazon CloudWatch. Anda dapat menggunakan jadwal ini dengan sejumlah pekerjaan.

**sp\$1attach\$1schedule**  
Menetapkan jadwal untuk pekerjaan yang dipilih.

**sp\$1add\$1jobschedule**  
Membuat aturan jadwal untuk pekerjaan di Amazon CloudWatch dan menetapkan target untuk aturan ini.

**sp\$1update\$1job**  
Memperbarui atribut pekerjaan yang dibuat sebelumnya.

**sp\$1update\$1jobstep**  
Memperbarui atribut langkah dalam pekerjaan.

**sp\$1update\$1schedule**  
Memperbarui atribut aturan jadwal di Amazon CloudWatch.

**sp\$1update\$1jobschedule**  
Memperbarui atribut jadwal untuk pekerjaan yang ditentukan.

**sp\$1delete\$1job**  
Menghapus pekerjaan.

**sp\$1delete\$1jobstep**  
Menghapus langkah pekerjaan dari pekerjaan.

**sp\$1delete\$1schedule**  
Menghapus jadwal.

**sp\$1delete\$1jobschedule**  
Menghapus aturan jadwal untuk pekerjaan yang ditentukan dari Amazon CloudWatch.

**sp\$1detach\$1schedule**  
Menghapus hubungan antara jadwal dan pekerjaan.

**get\$1jobs, update\$1job**  
Prosedur internal yang berinteraksi dengan AWS Elastic Beanstalk.

**sp\$1verify\$1job\$1date, sp\$1verify\$1job\$1time, sp\$1verify\$1job, sp\$1verify\$1jobstep, sp\$1verify\$1job\$1identifiers, sp\$1verify\$1schedule\$1identifiers**  
Prosedur internal yang memeriksa pengaturan.

## Sintaks untuk prosedur yang meniru SQL Server Agent di PostgreSQL
<a name="CHAP_Source.SQLServer.ToPostgreSQL.ExtensionPack.Agent.Syntax"></a>

`aws_sqlserver_ext.sp_add_job`Prosedur dalam paket ekstensi mengemulasi `msdb.dbo.sp_add_job` prosedur. Untuk informasi selengkapnya tentang prosedur Agen SQL Server sumber, lihat [dokumentasi teknis 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`Prosedur dalam paket ekstensi mengemulasi `msdb.dbo.sp_add_jobstep` prosedur. Untuk informasi selengkapnya tentang prosedur Agen SQL Server sumber, lihat [dokumentasi teknis 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`Prosedur dalam paket ekstensi mengemulasi `msdb.dbo.sp_add_schedule` prosedur. Untuk informasi selengkapnya tentang prosedur Agen SQL Server sumber, lihat [dokumentasi teknis 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`Prosedur dalam paket ekstensi mengemulasi `msdb.dbo.sp_attach_schedule` prosedur. Untuk informasi selengkapnya tentang prosedur Agen SQL Server sumber, lihat [dokumentasi teknis 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`Prosedur dalam paket ekstensi mengemulasi `msdb.dbo.sp_add_jobschedule` prosedur. Untuk informasi selengkapnya tentang prosedur Agen SQL Server sumber, lihat [dokumentasi teknis 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`Prosedur dalam paket ekstensi mengemulasi `msdb.dbo.sp_delete_job` prosedur. Untuk informasi selengkapnya tentang prosedur Agen SQL Server sumber, lihat [dokumentasi teknis 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`Prosedur dalam paket ekstensi mengemulasi `msdb.dbo.sp_delete_jobstep` prosedur. Untuk informasi selengkapnya tentang prosedur Agen SQL Server sumber, lihat [dokumentasi teknis 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`Prosedur dalam paket ekstensi mengemulasi `msdb.dbo.sp_delete_jobschedule` prosedur. Untuk informasi selengkapnya tentang prosedur Agen SQL Server sumber, lihat [dokumentasi teknis 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`Prosedur dalam paket ekstensi mengemulasi `msdb.dbo.sp_delete_schedule` prosedur. Untuk informasi selengkapnya tentang prosedur Agen SQL Server sumber, lihat [dokumentasi teknis 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`Prosedur dalam paket ekstensi mengemulasi `msdb.dbo.sp_detach_schedule` prosedur. Untuk informasi selengkapnya tentang prosedur Agen SQL Server sumber, lihat [dokumentasi teknis 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`Prosedur dalam paket ekstensi mengemulasi `msdb.dbo.sp_update_job` prosedur. Untuk informasi selengkapnya tentang prosedur Agen SQL Server sumber, lihat [dokumentasi teknis 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`Prosedur dalam paket ekstensi mengemulasi `msdb.dbo.sp_update_jobschedule` prosedur. Untuk informasi selengkapnya tentang prosedur Agen SQL Server sumber, lihat [dokumentasi teknis 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`Prosedur dalam paket ekstensi mengemulasi `msdb.dbo.sp_update_jobstep` prosedur. Untuk informasi selengkapnya tentang prosedur Agen SQL Server sumber, lihat [dokumentasi teknis 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`Prosedur dalam paket ekstensi mengemulasi `msdb.dbo.sp_update_schedule` prosedur. Untuk informasi selengkapnya tentang prosedur Agen SQL Server sumber, lihat [dokumentasi teknis 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
```

## Contoh untuk menggunakan prosedur yang meniru SQL Server Agent di PostgreSQL
<a name="CHAP_Source.SQLServer.ToPostgreSQL.ExtensionPack.Agent.Examples"></a>

Untuk menambahkan pekerjaan baru, gunakan `aws_sqlserver_ext.sp_add_job` prosedur seperti yang ditunjukkan berikut.

```
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');
```

Untuk menambahkan langkah pekerjaan baru, gunakan `aws_sqlserver_ext.sp_add_jobstep` prosedur seperti yang ditunjukkan berikut.

```
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');
```

Untuk menambahkan jadwal sederhana, gunakan `aws_sqlserver_ext.sp_add_schedule` prosedur seperti yang ditunjukkan berikut.

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

Untuk mengatur jadwal pekerjaan, gunakan `aws_sqlserver_ext.sp_attach_schedule` prosedur seperti yang ditunjukkan berikut.

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

Untuk membuat jadwal pekerjaan, gunakan `aws_sqlserver_ext.sp_add_jobschedule` prosedur seperti yang ditunjukkan berikut.

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

## Gunakan contoh kasus untuk meniru Agen SQL Server di PostgreSQL
<a name="CHAP_Source.SQLServer.ToPostgreSQL.ExtensionPack.Agent.UseCases"></a>

Jika kode database sumber Anda menggunakan SQL Server Agent untuk menjalankan pekerjaan, Anda dapat menggunakan paket ekstensi SQL Server ke PostgreSQL untuk mengonversi kode ini ke PostgreSQL. AWS SCT Paket ekstensi menggunakan AWS Lambda fungsi untuk meniru perilaku SQL Server Agent.

Anda dapat membuat AWS Lambda fungsi baru atau mendaftarkan fungsi yang ada.

**Untuk membuat AWS Lambda fungsi baru**

1. Di AWS SCT, di pohon database target, buka menu konteks (klik kanan), pilih **Terapkan paket ekstensi untuk**, lalu pilih **PostgreSQL**. 

   Wizard paket ekstensi muncul. 

1. Pada tab **layanan emulasi Agen SQL Server**, lakukan hal berikut: 
   + Pilih **Buat AWS Lambda fungsi**.
   + Untuk **login Database**, masukkan nama pengguna database target.
   + Untuk **kata sandi Database**, masukkan kata sandi untuk nama pengguna yang Anda masukkan pada langkah sebelumnya.
   + Untuk **folder pustaka Python, masukkan path ke folder pustaka** Python Anda.
   + Pilih **Create AWS Lambda Function**, lalu pilih **Next**.

**Untuk mendaftarkan AWS Lambda fungsi yang Anda gunakan sebelumnya**
+ Jalankan skrip berikut pada database target Anda.

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

  Dalam contoh sebelumnya, *`ARN`* adalah Amazon Resource Name (ARN) dari fungsi yang digunakan. AWS Lambda 

Contoh berikut menciptakan tugas sederhana yang terdiri dari satu langkah. Setiap lima menit, tugas ini menjalankan `job_example` fungsi yang dibuat sebelumnya. Fungsi ini menyisipkan catatan ke dalam `job_example_table` tabel.

**Untuk membuat tugas sederhana ini**

1. Buat pekerjaan menggunakan `aws_sqlserver_ext.sp_add_job` fungsi seperti yang ditunjukkan berikut.

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

1. Buat langkah pekerjaan menggunakan `aws_sqlserver_ext.sp_add_jobstep` fungsi seperti yang ditunjukkan berikut.

   ```
   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;');
   ```

   Langkah pekerjaan menentukan apa fungsi yang dilakukan.

1. Buat penjadwal untuk pekerjaan menggunakan `aws_sqlserver_ext.sp_add_jobschedule` fungsi seperti yang ditunjukkan berikut.

   ```
   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 */);
   ```

   Langkah pekerjaan menentukan apa fungsi yang dilakukan.

Untuk menghapus pekerjaan ini, gunakan `aws_sqlserver_ext.sp_delete_job` fungsi seperti yang ditunjukkan berikut.

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

# Menggunakan paket AWS SCT ekstensi untuk meniru SQL Server Database Mail di PostgreSQL
<a name="CHAP_Source.SQLServer.ToPostgreSQL.ExtensionPack.Mail"></a>

Anda dapat menggunakan SQL Server Database Mail untuk mengirim pesan email ke pengguna dari SQL Server Database Engine atau Azure SQL Managed Instance. Pesan email ini dapat berisi hasil kueri atau menyertakan file dari sumber daya apa pun di jaringan Anda. Untuk informasi selengkapnya tentang SQL Server Database Mail, lihat [dokumentasi teknis Microsoft](https://docs.microsoft.com/en-us/sql/relational-databases/database-mail/database-mail?view=sql-server-ver15).

PostgreSQL tidak memiliki padanan untuk SQL Server Database Mail. Untuk meniru fitur SQL Server Database Mail, AWS SCT buat paket ekstensi. Paket ekstensi ini menggunakan AWS Lambda dan Amazon Simple Email Service (Amazon SES). AWS Lambda menyediakan pengguna dengan antarmuka untuk berinteraksi dengan layanan pengiriman email Amazon SES. Untuk mengatur interaksi ini, tambahkan Amazon Resource Name (ARN) dari fungsi Lambda Anda. 

Untuk akun email baru, gunakan perintah berikut.

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

Untuk menambahkan ARN fungsi Lambda Anda ke akun email yang ada, gunakan perintah berikut.

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

Dalam contoh sebelumnya, *`ARN`* adalah ARN dari fungsi Lambda Anda.

Untuk meniru perilaku SQL Server Database Mail di PostgreSQL, paket AWS SCT ekstensi menggunakan tabel, tampilan, dan prosedur berikut.

## Tabel yang meniru SQL Server Database Mail di PostgreSQL
<a name="CHAP_Source.SQLServer.ToPostgreSQL.ExtensionPack.Mail.Tables"></a>

Untuk meniru SQL Server Database Mail, paket ekstensi menggunakan tabel berikut:

**sysmail\$1akun**  
Menyimpan informasi tentang akun email.

**sysmail\$1profil**  
Menyimpan informasi tentang profil pengguna.

**sysmail\$1server**  
Menyimpan informasi tentang server email.

**sysmail\$1mailitems**  
Menyimpan daftar pesan email.

**lampiran sysmail\$1**  
Berisi satu baris untuk setiap lampiran email.

**sysmail\$1log**  
Menyimpan informasi layanan tentang mengirim pesan email.

**sysmail\$1profileakun**  
Menyimpan informasi tentang profil pengguna dan akun email.

## Tampilan yang meniru SQL Server Database Mail di PostgreSQL
<a name="CHAP_Source.SQLServer.ToPostgreSQL.ExtensionPack.Mail.Views"></a>

Untuk meniru SQL Server Database Mail, AWS SCT membuat tampilan berikut dalam database PostgreSQL untuk memastikan kompatibilitas. Paket ekstensi tidak menggunakannya, tetapi kode yang dikonversi dapat menanyakan tampilan ini.

**sysmail\$1allitems**  
Termasuk daftar semua email.

**sysmail\$1faileditems**  
Termasuk daftar email yang tidak dapat dikirim.

**sysmail\$1sentitems**  
Termasuk daftar email yang dikirim.

**sysmail\$1unsentitems**  
Termasuk daftar email yang belum dikirim.

**sysmail\$1mailattachments**  
Termasuk daftar file terlampir.

## Prosedur yang meniru SQL Server Database Mail di PostgreSQL
<a name="CHAP_Source.SQLServer.ToPostgreSQL.ExtensionPack.Mail.Procedures"></a>

Untuk meniru SQL Server Database Mail, paket ekstensi menggunakan prosedur berikut:

**sp\$1send\$1dbmail**  
Mengirim email ke penerima yang ditentukan.

**sysmail\$1add\$1profile\$1sp**  
Membuat profil pengguna baru.

**sysmail\$1add\$1account\$1sp**  
Membuat akun email baru yang menyimpan informasi seperti kredensi Simple Mail Transfer Protocol (SMTP), dan sebagainya.

**sysmail\$1add\$1profileaccount\$1sp**  
Menambahkan akun email ke profil pengguna yang ditentukan.

**sysmail\$1update\$1profile\$1sp**  
Mengubah atribut profil pengguna seperti deskripsi, nama, dan sebagainya.

**sysmail\$1update\$1account\$1sp**  
Mengubah informasi di akun email yang ada.

**sysmail\$1update\$1profileaccount\$1sp**  
Memperbarui informasi akun email di profil pengguna yang ditentukan.

**sysmail\$1delete\$1profileaccount\$1sp**  
Menghapus akun email dari profil pengguna yang ditentukan.

**sysmail\$1delete\$1account\$1sp**  
Menghapus akun email.

**sysmail\$1delete\$1profile\$1sp**  
Menghapus profil pengguna.

**sysmail\$1delete\$1mailitems\$1sp**  
Menghapus email dari tabel internal.

**sysmail\$1help\$1profile\$1sp**  
Menampilkan informasi tentang profil pengguna.

**sysmail\$1help\$1account\$1sp**  
Menampilkan informasi tentang akun email.

**sysmail\$1help\$1profileaccount\$1sp**  
Menampilkan informasi tentang akun email yang terkait dengan profil pengguna.

**sysmail\$1dbmail\$1json**  
Prosedur internal yang menghasilkan permintaan JSON untuk AWS Lambda fungsi.

**sysmail\$1verify\$1profile\$1sp, sysmail\$1verify\$1account\$1sp, sysmail\$1verify\$1addressparams\$1sp**  
Prosedur internal yang memeriksa pengaturan.

**sp\$1get\$1dbmail, sp\$1set\$1dbmail, sysmail\$1dbmail\$1xml**  
Prosedur internal yang tidak digunakan lagi.

## Sintaks untuk prosedur yang meniru SQL Server Database Mail di PostgreSQL
<a name="CHAP_Source.SQLServer.ToPostgreSQL.ExtensionPack.Mail.Syntax"></a>

`aws_sqlserver_ext.sp_send_dbmail`Prosedur dalam paket ekstensi mengemulasi `msdb.dbo.sp_send_dbmail` prosedur. Untuk informasi selengkapnya tentang prosedur Mail Database SQL Server sumber, lihat [dokumentasi teknis 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`Prosedur dalam paket ekstensi mengemulasi `msdb.dbo.sysmail_delete_mailitems_sp` prosedur. Untuk informasi selengkapnya tentang prosedur Mail Database SQL Server sumber, lihat [dokumentasi teknis 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`Prosedur dalam paket ekstensi mengemulasi `msdb.dbo.sysmail_add_profile_sp` prosedur. Untuk informasi selengkapnya tentang prosedur Mail Database SQL Server sumber, lihat [dokumentasi teknis 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`Prosedur dalam paket ekstensi mengemulasi `msdb.dbo.sysmail_add_account_sp` prosedur. Untuk informasi selengkapnya tentang prosedur Mail Database SQL Server sumber, lihat [dokumentasi teknis 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`Prosedur dalam paket ekstensi mengemulasi `msdb.dbo.sysmail_add_profileaccount_sp` prosedur. Untuk informasi selengkapnya tentang prosedur Mail Database SQL Server sumber, lihat [dokumentasi teknis 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`Prosedur dalam paket ekstensi mengemulasi `msdb.dbo.sysmail_help_profile_sp` prosedur. Untuk informasi selengkapnya tentang prosedur Mail Database SQL Server sumber, lihat [dokumentasi teknis 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`Prosedur dalam paket ekstensi mengemulasi `msdb.dbo.sysmail_update_profile_sp` prosedur. Untuk informasi selengkapnya tentang prosedur Mail Database SQL Server sumber, lihat [dokumentasi teknis 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`Prosedur dalam paket ekstensi mengemulasi `msdb.dbo.sysmail_delete_profile_sp` prosedur. Untuk informasi selengkapnya tentang prosedur Mail Database SQL Server sumber, lihat [dokumentasi teknis 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`Prosedur dalam paket ekstensi mengemulasi `msdb.dbo.sysmail_help_account_sp` prosedur. Untuk informasi selengkapnya tentang prosedur Mail Database SQL Server sumber, lihat [dokumentasi teknis 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`Prosedur dalam paket ekstensi mengemulasi `msdb.dbo.sysmail_update_account_sp` prosedur. Untuk informasi selengkapnya tentang prosedur Mail Database SQL Server sumber, lihat [dokumentasi teknis 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`Prosedur dalam paket ekstensi mengemulasi `msdb.dbo.sysmail_delete_account_sp` prosedur. Untuk informasi selengkapnya tentang prosedur Mail Database SQL Server sumber, lihat [dokumentasi teknis 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`Prosedur dalam paket ekstensi mengemulasi `msdb.dbo.sysmail_help_profileaccount_sp` prosedur. Untuk informasi selengkapnya tentang prosedur Mail Database SQL Server sumber, lihat [dokumentasi teknis 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`Prosedur dalam paket ekstensi mengemulasi `msdb.dbo.sysmail_update_profileaccount_sp` prosedur. Untuk informasi selengkapnya tentang prosedur Mail Database SQL Server sumber, lihat [dokumentasi teknis 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`Prosedur dalam paket ekstensi mengemulasi `msdb.dbo.sysmail_delete_profileaccount_sp` prosedur. Untuk informasi selengkapnya tentang prosedur Mail Database SQL Server sumber, lihat [dokumentasi teknis 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
```

## Contoh untuk menggunakan prosedur yang meniru SQL Server Database Mail di PostgreSQL
<a name="CHAP_Source.SQLServer.ToPostgreSQL.ExtensionPack.Mail.Examples"></a>

Untuk mengirim email, gunakan `aws_sqlserver_ext.sp_send_dbmail` prosedur seperti yang ditunjukkan berikut.

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

Contoh berikut menunjukkan cara mengirim email dengan hasil query.

```
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'
);
```

Contoh berikut menunjukkan cara mengirim email dengan kode 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'
);
```

Untuk menghapus email, gunakan `aws_sqlserver_ext.sysmail_delete_mailitems_sp` prosedur seperti yang ditunjukkan berikut.

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

Contoh berikut menunjukkan cara menghapus email tertua.

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

Contoh berikut menunjukkan cara menghapus semua email yang tidak dapat dikirim.

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

Untuk membuat profil pengguna baru, gunakan `aws_sqlserver_ext.sysmail_add_profile_sp` prosedur seperti yang ditunjukkan berikut.

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

Contoh berikut menunjukkan cara membuat profil baru dan menyimpan pengenal profil unik dalam variabel.

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

Untuk membuat akun email baru, gunakan `aws_sqlserver_ext.sysmail_add_account_sp` prosedur seperti yang ditunjukkan berikut.

```
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'
);
```

Untuk menambahkan akun email ke profil pengguna, gunakan `aws_sqlserver_ext.sysmail_add_profileaccount_sp` prosedur seperti yang ditunjukkan berikut.

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

## Gunakan contoh kasus untuk meniru SQL Server Database Mail di PostgreSQL
<a name="CHAP_Source.SQLServer.ToPostgreSQL.ExtensionPack.Mail.UseCases"></a>

Jika kode database sumber Anda menggunakan SQL Server Database Mail untuk mengirim email, Anda dapat menggunakan paket AWS SCT ekstensi untuk mengonversi kode ini ke PostgreSQL.

**Untuk mengirim email dari database PostgreSQL Anda**

1. Buat dan konfigurasikan AWS Lambda fungsi Anda.

1. Terapkan paket AWS SCT ekstensi.

1. Buat profil pengguna menggunakan `sysmail_add_profile_sp` fungsi seperti yang ditunjukkan berikut.

1. Buat akun email menggunakan `sysmail_add_account_sp` fungsi seperti yang ditunjukkan berikut.

1. Tambahkan akun email ini ke profil pengguna Anda menggunakan `sysmail_add_profileaccount_sp` fungsi seperti yang ditunjukkan berikut.

   ```
   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. Kirim email menggunakan `sp_send_dbmail` fungsi seperti yang ditunjukkan berikut.

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

Untuk melihat informasi tentang semua profil pengguna, gunakan `sysmail_help_profile_sp` prosedur seperti yang ditunjukkan berikut.

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

Contoh berikut menampilkan informasi tentang profil pengguna tertentu.

```
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');
```

Untuk melihat informasi tentang semua akun email, gunakan `sysmail_help_account_sp` prosedur seperti yang ditunjukkan berikut.

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

Contoh berikut menampilkan informasi tentang akun email tertentu.

```
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');
```

Untuk melihat informasi tentang semua akun email yang terkait dengan profil pengguna, gunakan `sysmail_help_profileaccount_sp` prosedur seperti yang ditunjukkan berikut.

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

Contoh berikut memfilter catatan berdasarkan pengenal, nama profil, atau nama akun.

```
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');
```

Untuk mengubah nama atau deskripsi profil pengguna, gunakan `sysmail_update_profile_sp` prosedur seperti yang ditunjukkan berikut.

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

Untuk mengubah pengaturan akun email, gunakan `ysmail_update_account_sp` prosedur seperti yang ditunjukkan berikut.

```
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'
);
```