

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

# Menggunakan database PostgreSQL sebagai target untuk AWS Database Migration Service
<a name="CHAP_Target.PostgreSQL"></a>

Anda dapat memigrasikan data ke database PostgreSQL AWS DMS menggunakan, baik dari database PostgreSQL lain atau dari salah satu database lain yang didukung. 

Untuk informasi tentang versi PostgreSQL AWS DMS yang mendukung sebagai target, lihat. [Target untuk AWS DMS](CHAP_Introduction.Targets.md)

**catatan**  
Amazon Aurora Serverless tersedia sebagai target Amazon Aurora dengan kompatibilitas PostgreSQL. *Untuk informasi selengkapnya tentang Amazon Aurora Tanpa Server, lihat Menggunakan Amazon [Aurora Tanpa Server v2 di Panduan Pengguna Amazon Aurora](https://docs.aws.amazon.com//AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.html).*
Klaster DB Aurora Nirserver hanya dapat diakses dari Amazon VPC dan tidak dapat menggunakan [alamat IP publik](https://docs.aws.amazon.com//AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.requirements.html). Jadi jika Anda ingin memiliki instans replikasi di wilayah yang berbeda dari Aurora PostgreSQL Nirserver, Anda harus mengonfigurasi [peering VPC](https://docs.aws.amazon.com//dms/latest/userguide/CHAP_ReplicationInstance.VPC.html#CHAP_ReplicationInstance.VPC.Configurations.ScenarioVPCPeer). Jika tidak, periksa ketersediaan [Wilayah](https://docs.aws.amazon.com//AmazonRDS/latest/AuroraUserGuide/Concepts.AuroraFeaturesRegionsDBEngines.grids.html#Concepts.Aurora_Fea_Regions_DB-eng.Feature.Serverless) Aurora PostgreSQL Nirserver, dan putuskan untuk menggunakan salah satu wilayah tersebut untuk Aurora PostgreSQL Nirserver dan instans replikasi Anda.
Kemampuan Babelfish dibangun ke Amazon Aurora dan tidak memiliki biaya tambahan. Untuk informasi lebih lanjut, lihat [Menggunakan Babelfish untuk Aurora PostgreSQL](#CHAP_Target.PostgreSQL.Babelfish) sebagai target. AWS Database Migration Service

AWS DMS mengambil table-by-table pendekatan saat memigrasikan data dari sumber ke target dalam fase Full Load. Urutan tabel selama fase beban penuh tidak terjamin. Tabel tidak sinkron selama fase beban penuh dan saat penerapan transaksi yang di-cache untuk masing-masing tabel. Akibatnya, kendala integritas referensial aktif dapat mengakibatkan gagal tugas selama fase beban penuh.

Dalam PostgreSQL, foreign key (kendala integritas referensial) diimplementasikan menggunakan pemicu. Selama fase beban penuh, AWS DMS muat setiap tabel satu per satu. Kami sangat menyarankan Anda nonaktifkan pembatasan kunci asing selama beban penuh dengan menggunakan salah satu metode berikut:
+ Nonaktifkan sementara semua pemicu dari instans, dan selesaikan beban penuh.
+ Gunakan parameter `session_replication_role` di PostgreSQL.

Sewaktu-waktu, pemicu dapat berada di salah satu kondisi berikut: `origin`, `replica`, `always`, atau `disabled`. Saat parameter `session_replication_role` diatur ke `replica`, hanya pemicu dalam kondisi `replica` yang aktif, dan akan dipicu saat dipanggil. Jika tidak, pemicu tetap tidak aktif. 

PostgreSQL memiliki mekanisme failsafe untuk mencegah tabel terpotong, bahkan ketika `session_replication_role` sudah diatur. Anda dapat menggunakan ini sebagai alternatif untuk menonaktifkan pemicu, untuk membantu menjalankan beban penuh hingga selesai. Untuk melakukannya, tetapkan mode persiapan tabel target untuk `DO_NOTHING`. Jika tidak, operasi DROP dan TRUNCATE gagal ketika ada pembatasan kunci asing.

Di Amazon RDS, Anda dapat mengontrol pengaturan parameter ini menggunakan grup parameter. Anda dapat mengatur parameter secara langsung untuk instans PostgreSQL yang berjalan di Amazon EC2.



Untuk detail tambahan tentang bekerja dengan database PostgreSQL sebagai target AWS DMS, lihat bagian berikut: 

**Topics**
+ [Batasan menggunakan PostgreSQL sebagai target untuk AWS Database Migration Service](#CHAP_Target.PostgreSQL.Limitations)
+ [Batasan menggunakan Amazon Aurora PostgreSQL Limitless sebagai target AWS Database Migration Service](#CHAP_Target.PostgreSQL.Aurora.Limitations)
+ [Persyaratan keamanan saat menggunakan database PostgreSQL sebagai target AWS Database Migration Service](#CHAP_Target.PostgreSQL.Security)
+ [Pengaturan titik akhir dan Atribut Koneksi Ekstra (ECAs) saat menggunakan PostgreSQL sebagai target AWS DMS](#CHAP_Target.PostgreSQL.ConnectionAttrib)
+ [Tipe data target untuk PostgreSQL](#CHAP_Target.PostgreSQL.DataTypes)
+ [Menggunakan Babelfish untuk Aurora PostgreSQL sebagai target untuk AWS Database Migration Service](#CHAP_Target.PostgreSQL.Babelfish)

## Batasan menggunakan PostgreSQL sebagai target untuk AWS Database Migration Service
<a name="CHAP_Target.PostgreSQL.Limitations"></a>

Batasan berikut berlaku ketika menggunakan basis data PostgreSQL sebagai target untuk AWS DMS:
+ Untuk migrasi heterogen, tipe data JSON dikonversi ke tipe data CLOB Asli secara internal.
+ Dalam migrasi Oracle ke PostgreSQL, jika kolom di Oracle berisi karakter NULL (nilai hex U\$10000), mengubah karakter NULL menjadi spasi (nilai hex U\$10020) AWS DMS . Hal ini disebabkan oleh keterbatasan PostgreSQL.
+ AWS DMS tidak mendukung replikasi ke tabel dengan indeks unik yang dibuat dengan fungsi coalesce.
+ Jika tabel Anda menggunakan urutan, perbarui nilai `NEXTVAL` untuk setiap urutan dalam database target setelah Anda menghentikan replikasi dari database sumber. AWS DMS menyalin data dari database sumber Anda, tetapi tidak memigrasikan urutan ke target selama replikasi yang sedang berlangsung.

## Batasan menggunakan Amazon Aurora PostgreSQL Limitless sebagai target AWS Database Migration Service
<a name="CHAP_Target.PostgreSQL.Aurora.Limitations"></a>

Batasan berikut berlaku saat menggunakan Amazon Aurora PostgreSQL Limitless sebagai target untuk: AWS DMS
+ AWS DMS Validasi Data tidak mendukung Amazon Aurora PostgreSQL Limitless.
+ AWS DMS memigrasikan tabel sumber sebagai tabel Standar, yang tidak didistribusikan. Setelah migrasi, Anda dapat mengonversi tabel Standar ini ke tabel Tanpa Batas dengan mengikuti panduan konversi resmi.

## Persyaratan keamanan saat menggunakan database PostgreSQL sebagai target AWS Database Migration Service
<a name="CHAP_Target.PostgreSQL.Security"></a>

Untuk tujuan keamanan, akun pengguna yang digunakan untuk migrasi data harus merupakan pengguna terdaftar di basis data PostgreSQL yang Anda gunakan sebagai target.

Titik akhir target PostgreSQL Anda memerlukan izin pengguna minimum untuk menjalankan AWS DMS migrasi, lihat contoh berikut.

```
    CREATE USER newuser WITH PASSWORD 'your-password';
    ALTER SCHEMA schema_name OWNER TO newuser;
```

Atau,

```
    GRANT USAGE ON SCHEMA schema_name TO myuser;
    GRANT CONNECT ON DATABASE postgres to myuser;
    GRANT CREATE ON DATABASE postgres TO myuser;
    GRANT CREATE ON SCHEMA schema_name TO myuser;
    GRANT UPDATE, INSERT, SELECT, DELETE, TRUNCATE ON ALL TABLES IN SCHEMA schema_name TO myuser;
    GRANT TRUNCATE ON schema_name."BasicFeed" TO myuser;
```

## Pengaturan titik akhir dan Atribut Koneksi Ekstra (ECAs) saat menggunakan PostgreSQL sebagai target AWS DMS
<a name="CHAP_Target.PostgreSQL.ConnectionAttrib"></a>

Anda dapat menggunakan pengaturan endpoint dan Extra Connection Attributes (ECAs) untuk mengonfigurasi database target PostgreSQL Anda. 

Anda menentukan pengaturan saat Anda membuat titik akhir target menggunakan AWS DMS konsol, atau dengan menggunakan `create-endpoint` perintah di [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), dengan sintaks `--postgre-sql-settings '{"EndpointSetting": "value", ...}'` JSON.

Anda menentukan ECAs menggunakan `ExtraConnectionAttributes` parameter untuk titik akhir Anda.

Tabel berikut menunjukkan pengaturan endpoint yang dapat Anda gunakan dengan PostgreSQL sebagai target.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/dms/latest/userguide/CHAP_Target.PostgreSQL.html)

## Tipe data target untuk PostgreSQL
<a name="CHAP_Target.PostgreSQL.DataTypes"></a>

Titik akhir database PostgreSQL untuk AWS DMS mendukung sebagian besar tipe data database PostgreSQL. Tabel berikut menunjukkan tipe data target database PostgreSQL yang didukung saat AWS DMS menggunakan dan pemetaan default dari tipe data. AWS DMS 

Untuk informasi tambahan tentang tipe AWS DMS data, lihat[Tipe data untuk AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  AWS DMS tipe data  |  Tipe data PostgreSQL  | 
| --- | --- | 
|  BOOLEAN  |  BOOLEAN  | 
|  BLOB  |  BYTEA  | 
|  BYTES  |  BYTEA  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  DATETIME  |  Jika skala dari 0 sampai 6, gunakan TIMESTAMP. Jika skala dari 7 sampai 9, gunakan VARCHAR (37).  | 
|  INT1  |  SMALLINT  | 
|  INT2  |  SMALLINT  | 
|  INT4  |  INTEGER  | 
|  INT8  |  BIGINT  | 
|  NUMERIC   |  DECIMAL (P,S)  | 
|  REAL4  |  FLOAT4  | 
|  REAL8  |  FLOAT8  | 
|  STRING  |  Jika panjangnya dari 1 sampai 21.845, gunakan VARCHAR (panjang dalam bytes).  Jika panjangnya 21.846 hingga 2.147.483.647, gunakan VARCHAR (65535).  | 
|  UINT1  |  SMALLINT  | 
|  UINT2  |  INTEGER  | 
|  UINT4  |  BIGINT  | 
|  UINT8  |  BIGINT  | 
|  WSTRING  |  Jika panjangnya dari 1 sampai 21.845, gunakan VARCHAR (panjang dalam bytes).  Jika panjangnya 21.846 hingga 2.147.483.647, gunakan VARCHAR (65535).  | 
|  NCLOB  |  TEXT  | 
|  CLOB  |  TEXT  | 

**catatan**  
Saat mereplikasi dari sumber PostgreSQL AWS DMS , buat tabel target dengan tipe data yang sama untuk semua kolom, selain kolom dengan tipe data yang ditentukan pengguna. Dalam kasus seperti itu, tipe data dibuat sebagai “karakter bervariasi” dalam target.

## Menggunakan Babelfish untuk Aurora PostgreSQL sebagai target untuk AWS Database Migration Service
<a name="CHAP_Target.PostgreSQL.Babelfish"></a>

Anda dapat memigrasikan tabel sumber SQL Server ke target Babelfish untuk Amazon Aurora PostgreSQL menggunakan. AWS Database Migration Service Dengan Babelfish, Aurora PostgreSQL memahami T-SQL, dialek SQL milik Microsoft SQL Server, dan mendukung protokol komunikasi yang sama. Jadi, aplikasi yang ditulis untuk SQL Server sekarang dapat bekerja dengan Aurora dengan perubahan kode yang lebih sedikit. Kemampuan Babelfish dibangun ke Amazon Aurora dan tidak memiliki biaya tambahan. Anda dapat mengaktifkan Babelfish di cluster Amazon Aurora Anda dari konsol Amazon RDS.

**Saat Anda membuat titik akhir AWS DMS target menggunakan perintah AWS DMS konsol, API, atau CLI, tentukan mesin target sebagai **Amazon Aurora PostgreSQL**, dan beri nama database, babelfish\$1db.** Di bagian **Pengaturan Endpoint**, tambahkan pengaturan untuk mengatur ke `Babelfish` dan `DatabaseMode` `BabelfishDatabaseName` ke nama database target Babelfish T-SQL.

### Menambahkan aturan transformasi ke tugas migrasi Anda
<a name="CHAP_Target.PostgreSQL.Babelfish.transform"></a>

Saat Anda menentukan tugas migrasi untuk target Babelfish, Anda perlu menyertakan aturan transformasi yang memastikan DMS menggunakan tabel T-SQL Babelfish yang telah dibuat sebelumnya dalam database target.

Pertama, tambahkan aturan transformasi ke tugas migrasi Anda yang membuat semua nama tabel menjadi huruf kecil. Babelfish menyimpan sebagai huruf kecil dalam `pg_class` katalog PostgreSQL nama-nama tabel yang Anda buat menggunakan T-SQL. Namun, ketika Anda memiliki tabel SQL Server dengan nama kasus campuran, DMS membuat tabel menggunakan tipe data asli PostgreSQL, bukan tipe data yang kompatibel dengan T-SQL. Untuk alasan itu, pastikan untuk menambahkan aturan transformasi yang membuat semua nama tabel huruf kecil. Perhatikan bahwa nama kolom tidak boleh diubah menjadi huruf kecil.

Selanjutnya, jika Anda menggunakan mode migrasi multidatabase saat menentukan klaster, tambahkan aturan transformasi yang mengganti nama skema SQL Server asli. Pastikan untuk mengganti nama nama skema SQL Server untuk menyertakan nama database T-SQL. Misalnya, jika nama skema SQL Server asli adalah dbo, dan nama database T-SQL Anda adalah mydb, ganti nama skema menjadi mydb\$1dbo menggunakan aturan transformasi.

**catatan**  
Saat menggunakan Babelfish untuk Aurora PostgreSQL 16 atau yang lebih baru, mode migrasi default adalah “mutidatabase”. Saat menjalankan tugas migrasi DMS, pastikan untuk meninjau parameter mode migrasi dan memperbarui aturan transformasi jika diperlukan.

Jika Anda menggunakan mode database tunggal, Anda tidak memerlukan aturan transformasi untuk mengganti nama nama skema. Nama skema memiliki one-to-one pemetaan dengan target database T-SQL di Babelfish.

Aturan transformasi sampel berikut membuat semua nama tabel huruf kecil, dan mengganti nama skema SQL Server asli dari ke. `dbo` `mydb_dbo`

```
{
   "rules": [
   {
      "rule-type": "transformation",
      "rule-id": "566251737",
      "rule-name": "566251737",
      "rule-target": "schema",
      "object-locator": {
         "schema-name": "dbo"
      },
      "rule-action": "rename",
      "value": "mydb_dbo",
      "old-value": null
   },
   {
      "rule-type": "transformation",
      "rule-id": "566139410",
      "rule-name": "566139410",
      "rule-target": "table",
      "object-locator": {
         "schema-name": "%",
         "table-name": "%"
      },
      "rule-action": "convert-lowercase",
      "value": null,
      "old-value": null
   },
   {
      "rule-type": "selection",
      "rule-id": "566111704",
      "rule-name": "566111704",
      "object-locator": {
         "schema-name": "dbo",
         "table-name": "%"
      },
      "rule-action": "include",
      "filters": []
   }
]
}
```

### Keterbatasan untuk menggunakan titik akhir target PostgreSQL dengan tabel Babelfish
<a name="CHAP_Target.PostgreSQL.Babelfish.limitations"></a>

Batasan berikut berlaku saat menggunakan titik akhir target PostgreSQL dengan tabel Babelfish:
+ Untuk mode **persiapan tabel Target**, gunakan hanya mode **Do nothing** atau **Truncate.** Jangan gunakan **tabel Drop pada mode target**. Dalam mode itu, DMS membuat tabel sebagai tabel PostgreSQL yang T-SQL mungkin tidak mengenali.
+ AWS DMS tidak mendukung tipe data sql\$1variant.
+ Babelfish di bawah titik akhir Postgres tidak mendukung`HEIRARCHYID`, `GEOMETRY` (sebelum 3.5.4) dan `GEOGRAPHY` (sebelum 3.5.4) tipe data. Untuk memigrasikan tipe data ini, Anda dapat menambahkan aturan transformasi untuk mengonversi tipe data ke wstring (250).
+ Babelfish hanya mendukung migrasi`BINARY`,`VARBINARY`, dan tipe `IMAGE` data menggunakan tipe data. `BYTEA` [Untuk versi Aurora PostgreSQL sebelumnya, Anda dapat menggunakan DMS untuk memigrasikan tabel ini ke titik akhir target Babelfish.](CHAP_Target.Babelfish.md) Anda tidak perlu menentukan panjang untuk tipe `BYTEA` data, seperti yang ditunjukkan pada contoh berikut.

  ```
  [Picture] [VARBINARY](max) NULL
  ```

  Ubah tipe data T-SQL sebelumnya ke tipe data yang didukung T-SQL. `BYTEA`

  ```
  [Picture] BYTEA NULL
  ```
+ Untuk versi Aurora PostgreSQL Babelfish sebelumnya, jika Anda membuat tugas migrasi untuk replikasi berkelanjutan dari SQL Server ke Babelfish menggunakan titik akhir target PostgreSQL, Anda perlu menetapkan tipe data ke tabel apa pun yang menggunakan kolom. `SERIAL` `IDENTITY` Dimulai dengan Aurora PostgreSQL (versi 15.3/14.8 dan lebih tinggi) dan Babelfish (versi 3.2.0 dan lebih tinggi), kolom identitas didukung, dan tidak lagi diperlukan untuk menetapkan tipe data SERIAL. Untuk informasi selengkapnya, lihat [Penggunaan SERIAL](https://docs.aws.amazon.com/dms/latest/sql-server-to-aurora-postgresql-migration-playbook/chap-sql-server-aurora-pg.tsql.sequences..html) di bagian Urutan dan Identitas dari *SQL Server ke Aurora PostgreSQL* Migration Playbook. Kemudian, saat Anda membuat tabel di Babelfish, ubah definisi kolom dari berikut ini.

  ```
      [IDCol] [INT] IDENTITY(1,1) NOT NULL PRIMARY KEY
  ```

  Ubah yang sebelumnya menjadi berikut.

  ```
      [IDCol] SERIAL PRIMARY KEY
  ```

  Aurora PostgreSQL yang kompatibel dengan Babelfish membuat urutan menggunakan konfigurasi default dan menambahkan batasan ke kolom. `NOT NULL` Urutan yang baru dibuat berperilaku seperti urutan reguler (bertambah 1) dan tidak memiliki opsi komposit`SERIAL`.
+ Setelah memigrasikan data dengan tabel yang menggunakan `IDENTITY` kolom atau tipe `SERIAL` data, setel ulang objek urutan berbasis PostgreSQL berdasarkan nilai maksimum kolom. Setelah melakukan beban penuh tabel, gunakan kueri T-SQL berikut untuk menghasilkan pernyataan untuk menyemai objek urutan terkait.

  ```
  DECLARE @schema_prefix NVARCHAR(200) = ''
  
  IF current_setting('babelfishpg_tsql.migration_mode') = 'multi-db'
          SET @schema_prefix = db_name() + '_'
  
  SELECT 'SELECT setval(pg_get_serial_sequence(''' + @schema_prefix + schema_name(tables.schema_id) + '.' + tables.name + ''', ''' + columns.name + ''')
                 ,(select max(' + columns.name + ') from ' + schema_name(tables.schema_id) + '.' + tables.name + '));'
  FROM sys.tables tables
  JOIN sys.columns columns ON tables.object_id = columns.object_id
  WHERE columns.is_identity = 1
  
  UNION ALL
  
  SELECT 'SELECT setval(pg_get_serial_sequence(''' + @schema_prefix + table_schema + '.' + table_name + ''', 
  ''' + column_name + '''),(select max(' + column_name + ') from ' + table_schema + '.' + table_name + '));'
  FROM information_schema.columns
  WHERE column_default LIKE 'nextval(%';
  ```

  Kueri menghasilkan serangkaian pernyataan SELECT yang Anda jalankan untuk memperbarui nilai IDENTITAS dan SERIAL maksimum.
+ Untuk versi Babelfish sebelum 3.2, **mode LOB Penuh** dapat mengakibatkan kesalahan tabel. Jika itu terjadi, buat tugas terpisah untuk tabel yang gagal dimuat. Kemudian gunakan **mode LOB Terbatas** untuk menentukan nilai yang sesuai untuk **ukuran LOB Maksimum (KB)**. Pilihan lain adalah untuk mengatur pengaturan SQL Server Endpoint Connection Attribute. `ForceFullLob=True`
+ Untuk versi Babelfish sebelum 3.2, melakukan validasi data dengan tabel Babelfish yang tidak menggunakan kunci primer berbasis integer menghasilkan pesan bahwa kunci unik yang sesuai tidak dapat ditemukan. Dimulai dengan Aurora PostgreSQL (versi 15.3/14.8 dan lebih tinggi) dan Babelfish (versi 3.2.0 dan lebih tinggi), validasi data untuk kunci primer non-integer didukung. 
+ Karena perbedaan presisi dalam jumlah tempat desimal selama beberapa detik, DMS melaporkan kegagalan validasi data untuk tabel Babelfish yang menggunakan tipe data. `DATETIME` Untuk menekan kegagalan tersebut, Anda dapat menambahkan tipe aturan validasi berikut untuk tipe `DATETIME` data.

  ```
  {
           "rule-type": "validation",
           "rule-id": "3",
           "rule-name": "3",
           "rule-target": "column",
           "object-locator": {
               "schema-name": "dbo",
               "table-name": "%",
               "column-name": "%",
               "data-type": "datetime"
           },
           "rule-action": "override-validation-function",
           "source-function": "case when ${column-name} is NULL then NULL else 0 end",
           "target-function": "case when ${column-name} is NULL then NULL else 0 end"
       }
  ```