Menggunakan basis data PostgreSQL sebagai target untuk AWS Database Migration Service - AWS Database Migration Service

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

Menggunakan basis data PostgreSQL sebagai target untuk AWS Database Migration Service

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

catatan
  • Amazon Aurora Serverless tersedia sebagai target untuk 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.

  • 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 ke Amazon Aurora dan tidak memiliki biaya tambahan. Untuk informasi lebih lanjut, lihat Menggunakan Babelfish untuk Aurora PostgreSQL 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:

Keterbatasan dalam menggunakan PostgreSQL sebagai target 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), mengubah karakter NULL menjadi spasi (nilai hex U+0020) 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.

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 titik akhir dan Atribut Koneksi Ekstra (ECA) saat menggunakan PostgreSQL sebagai target AWS DMS

Anda dapat menggunakan pengaturan endpoint dan Extra Connection Attributes (ECA) 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, dengan sintaks --postgre-sql-settings '{"EndpointSetting": "value", ...}' JSON.

Anda menentukan ECA menggunakan ExtraConnectionAttributes parameter untuk titik akhir Anda.

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

Nama Deskripsi

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 AWS DMS bypass kunci asing 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 valid: SALAH/BETUL

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 titik akhir target bersama-sama.

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

Jangan gunakan MapUnboundedNumericAsString dengan target non-PostgreSQL.

loadUsingCSV

Gunakan Extra Connection Attribute (ECA) ini untuk mentransfer data untuk operasi full-load menggunakan perintah\ COPY.

Nilai default: true

Nilai yang benar: benar/salah

Contoh ECA: loadUsingCSV=true;

Catatan: Menyetel ECA ini ke false dapat mengakibatkan beberapa degradasi kinerja replikasi karena INSERT dijalankan secara langsung.

DatabaseMode

Gunakan atribut ini untuk mengubah perilaku default penanganan replikasi 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 database target Babelfish T-SQL 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 AWS DMS menggunakan dan pemetaan default dari tipe data. AWS DMS

Untuk informasi tambahan tentang tipe AWS DMS 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 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 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 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_db. 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

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 adalahdbo, dan nama database T-SQL Andamydb, ganti nama skema menjadi menggunakan aturan transformasi. mydb_dbo

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

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

  • Babelfish tidak mendukungHEIRARCHYID,GEOMETRY, dan tipe GEOGRAPHY data. Untuk memigrasikan tipe data ini, Anda dapat menambahkan aturan transformasi untuk mengonversi tipe data. 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 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 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 kompositSERIAL.

  • 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" }