View a markdown version of this page

Menggunakan database PostgreSQL sebagai target AWS Database Migration Service - AWS Layanan Migrasi Database

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 AWS Database Migration Service

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

Untuk informasi tentang versi PostgreSQL yang AWS DMS mendukung sebagai target, lihat. Target untuk AWS DMS

catatan
  • Amazon Aurora Serverless tersedia sebagai target untuk Amazon Aurora dengan kompatibilitas PostgreSQL. Untuk informasi selengkapnya tentang Amazon Aurora Serverless, lihat Menggunakan Amazon Aurora Serverless v2 di Panduan Pengguna Amazon Aurora.

  • Klaster DB Aurora Nirserver hanya dapat diakses dari Amazon VPC dan tidak dapat menggunakan alamat IP publik. Jadi jika Anda ingin memiliki instans replikasi di wilayah yang berbeda dari Aurora PostgreSQL Nirserver, Anda harus mengonfigurasi peering VPC. Jika tidak, periksa ketersediaan Wilayah Aurora PostgreSQL Nirserver, dan putuskan untuk menggunakan salah satu wilayah tersebut untuk Aurora PostgreSQL Nirserver dan instans replikasi Anda.

  • Kemampuan Babelfish dibangun di Amazon Aurora dan tidak memiliki biaya tambahan. Untuk informasi selengkapnya, lihat Menggunakan Babelfish untuk Aurora PostgreSQL sebagai target untuk. AWS Database Migration Service

AWS DMS mengambil pendekatan table-by-table 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 memuat 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 untuk AWS DMS, lihat bagian berikut:

Batasan penggunaan PostgreSQL sebagai target untuk AWS Database Migration Service

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+0000), AWS DMS mengubah karakter NULL menjadi spasi (nilai hex U+0020). Hal ini disebabkan oleh keterbatasan PostgreSQL.

  • AWS DMS tidak mendukung replikasi ke tabel dengan indeks unik yang dibuat dengan fungsi koalesce.

  • 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 penggunaan Amazon Aurora PostgreSQL Limitless sebagai target untuk AWS Database Migration Service

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

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 Endpoint dan Extra Connection Attributes (ECA) saat menggunakan PostgreSQL sebagai target AWS DMS

Anda dapat menggunakan pengaturan titik akhir dan Atribut Koneksi Ekstra (ECA) untuk mengonfigurasi database target PostgreSQL Anda.

Anda menentukan pengaturan saat membuat titik akhir target menggunakan AWS DMS konsol, atau dengan menggunakan create-endpoint perintah di AWS CLI, dengan sintaks --postgre-sql-settings '{"EndpointSetting": "value", ...}' JSON.

Anda menentukan ECA menggunakan ExtraConnectionAttributes parameter untuk titik akhir Anda.

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

Nama Deskripsi

ConnectionTimeout

Gunakan atribut koneksi tambahan (ECA) ini untuk mengatur batas waktu koneksi titik akhir untuk instance PostgreSQL, dalam detik. Nilai bawaannya adalah 10 detik. Contoh ECA:ConnectionTimeout=30.

MaxFileSize

Menentukan ukuran maksimum (dalam KB) dari setiap file .csv yang digunakan untuk mentransfer data ke PostgreSQL.

Nilai default: 32.768 KB (32 MB)

Nilai valid: 1-1.048.576 KB (hingga 1,1 GB)

Contoh: --postgre-sql-settings '{"MaxFileSize": 512}'

ExecuteTimeout

Menetapkan pernyataan timeout klien untuk instans PostgreSQL, dalam hitungan detik. Nilai default adalah 60 detik.

Contoh: --postgre-sql-settings '{"ExecuteTimeout": 100}'

AfterConnectScript= SET session_replication_role = replica

Atribut ini memiliki kunci asing AWS DMS bypass dan pemicu pengguna untuk mengurangi waktu yang dibutuhkan untuk memuat data secara massal.

MapUnboundedNumericAsString

Parameter ini memperlakukan kolom dengan tipe data NUMERIC tak terbatas sebagai STRING agar berhasil bermigrasi tanpa kehilangan presisi nilai numerik. Gunakan parameter ini hanya untuk replikasi dari sumber PostgreSQL ke target PostgreSQL, atau basis data dengan kompatibilitas PostgreSQL.

Nilai default: SALAH

Nilai yang valid: false/true

Contoh: --postgre-sql-settings '{"MapUnboundedNumericAsString": "true"}

Menggunakan parameter ini dapat mengakibatkan beberapa degradasi performa replikasi karena transformasi dari numerik ke string dan kembali ke numerik. Parameter ini didukung untuk digunakan oleh DMS versi 3.4.4 dan versi yang lebih tinggi

catatan

Hanya gunakan MapUnboundedNumericAsString di sumber PostgreSQL dan target titik akhir bersama-sama.

Penggunaan titik MapUnboundedNumericAsString akhir PostgreSQL sumber membatasi presisi hingga 28 selama CDC. Penggunaan MapUnboundedNumericAsString pada titik akhir target, memigrasikan data dengan Precision 28 Scale 6.

Jangan gunakan MapUnboundedNumericAsString dengan target non-PostgreSQL.

Selama CDC, nilai NUMERIC tak terbatas dipotong menjadi 1.000 karakter jika representasi string mereka melebihi batas itu.

loadUsingCSV

Gunakan Extra Connection Attribute (ECA) ini untuk mentransfer data untuk operasi beban penuh menggunakan perintah\ COPY.

Nilai default: true

Nilai yang valid: true/false

Contoh ECA: loadUsingCSV=true;

Catatan: Men yetel ECA ini ke false dapat mengakibatkan beberapa penurunan kinerja replikasi karena INSERT dijalankan secara langsung.

DatabaseMode

Gunakan atribut ini untuk mengubah perilaku default penanganan replikasi dari titik akhir yang kompatibel dengan Postgresql yang memerlukan beberapa konfigurasi tambahan, seperti titik akhir Babelfish.

Nilai default: DEFAULT

Nilai valid: DEFAULT, BABELFISH

Contoh: DatabaseMode=default;

BabelfishDatabaseName

Gunakan atribut ini untuk menentukan nama T-SQL database Babelfish target yang sedang dimigrasikan. Ini wajib diisi jika DatabaseMode diatur ke Babelfish. Ini bukan babelfish_db database yang dicadangkan.

Contoh: BabelfishDatabaseName=TargetDb;

Tipe data target untuk PostgreSQL

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 menggunakan AWS DMS dan pemetaan default dari tipe AWS DMS data.

Untuk informasi tambahan tentang AWS DMS tipe data, lihatTipe data untuk AWS Database Migration Service.

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, membuat AWS DMS 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 AWS Database Migration Service

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 di 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 console, API, atau CLI, tentukan mesin target sebagai Amazon Aurora PostgreSQL, dan beri nama database, babelfish_db. Di bagian Peng aturan Titik Akhir, tambahkan pengaturan DatabaseMode untuk dis Babelfish et BabelfishDatabaseName el ke dan ke nama database Babelfish T-SQL target.

Menambahkan aturan transformasi ke tugas migrasi

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

Pertama, tambahkan aturan transformasi ke tugas migrasi Anda yang membuat semua nama tabel menjadi huruf kecil. Babelfish menyimpan sebagai huruf kecil di pg_class katalog PostgreSQL nama-nama tabel yang Anda buat menggunakan. T-SQL Namun, bila Anda memiliki tabel SQL Server dengan nama kasus campuran, DMS membuat tabel menggunakan tipe data asli PostgreSQL alih-alih tipe data yang kompatibel. 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 Anda mendefinisikan cluster Anda, tambahkan aturan transformasi yang mengganti nama skema SQL Server asli. Pastikan untuk mengganti nama skema SQL Server untuk menyertakan nama T-SQL database. Misalnya, jika nama skema SQL Server asli adalah dbo, dan nama T-SQL database Anda adalah mydb, ganti nama skema menjadi mydb_dbo menggunakan aturan transformasi.

catatan

Saat menggunakan Babelfish untuk Aurora PostgreSQL 16 atau yang lebih baru, mode migrasi default adalah “multidatabase”. Saat menjalankan tugas AWS DMS migrasi, 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 skema. Nama skema memiliki pemetaan satu-ke-satu dengan T-SQL database target di Babelfish.

Aturan transformasi sampel berikut membuat semua nama tabel huruf kecil, dan mengganti nama skema SQL Server asli dari menjadi. 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": [] } ] }

Batasan untuk menggunakan titik akhir target PostgreSQL dengan tabel Babelfish

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 dikenali.

  • AWS DMS tidak mendukung tipe data sql_variant.

  • Babelfish di bawah titik akhir Postgres tidak mendukungHIERARCHYID, 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 migrasiBINARY,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. Anda tidak perlu menentukan panjang untuk tipe BYTEA data, seperti yang ditunjukkan pada contoh berikut.

    [Picture] [VARBINARY](max) NULL

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

    [Picture] BYTEA NULL
  • Untuk Aurora PostgreSQL Babelfish versi sebelumnya, jika Anda membuat tugas migrasi untuk replikasi berkelanjutan dari SQL Server ke Babelfish menggunakan titik akhir target PostgreSQL, Anda perlu menetapkan tipe SERIAL data ke setiap tabel yang menggunakan kolom. 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 di bagian Urutan dan Identitas pada Playbook Migrasi SQL Server ke Aurora PostgreSQL. Kemudian, ketika 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

    Babelfish-compatible Aurora PostgreSQL membuat urutan menggunakan konfigurasi default dan menambahkan batasan NOT NULL ke kolom. Urutan yang baru dibuat berperilaku seperti urutan biasa (bertambah 1) dan tidak memiliki SERIAL opsi komposit.

  • Setelah memigrasikan data dengan tabel yang menggunakan IDENTITY kolom atau tipe SERIAL data, atur ulang objek PostgreSQL-based urutan berdasarkan nilai maksimum untuk kolom. Setelah melakukan pemuatan penuh tabel, gunakan T-SQL kueri 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 IDENTITY dan SERIAL maksimum.

  • Untuk versi Babelfish sebelum 3.2, mode LOB penuh mungkin 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 mengatur pengaturan SQL Server Endpoint Connection AttributeForceFullLob=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 untuk detik, DMS melaporkan kegagalan validasi data untuk tabel Babelfish yang menggunakan DATETIME tipe data. Untuk menekan kegagalan tersebut, Anda dapat menambahkan jenis 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" }