Saat memigrasikan skema, data, dan metadata dari database sumber ke database tujuan, Anda harus memastikan bahwa semua informasi dimigrasikan secara akurat. Database Migration Service menyediakan mekanisme yang akurat untuk memigrasikan objek database (termasuk skema, data, dan metadata) dari satu database PostgreSQL ke database PostgreSQL lainnya.
Selama proses migrasi, data dan batasan dimigrasikan dalam fase terstruktur. Data akan dimigrasikan terlebih dahulu selama pemuatan snapshot awal, dan batasan seperti kunci utama, kunci asing, dan indeks akan dibuat ulang di instance tujuan setelah pemuatan awal selesai.
Komponen data, skema, dan metadata berikut dimigrasikan sebagai bagian dari migrasi database:
Data
Semua tabel dan skema dari database yang dipilih untuk migrasi, kecuali skema sistem berikut:
- Skema informasi (
information_schema) - Skema apa pun yang diawali dengan
pg_(misalnya,pg_catalog,pg_toast)
Untuk mengetahui informasi selengkapnya tentang skema sistem ini, lihat Batasan umum.
Anda dapat menambahkan atau menghapus database dari tugas migrasi selama migrasi berlangsung. Menghapus database akan menghentikan replikasi untuk database tersebut tanpa menghapus database yang sudah dimigrasikan di instance tujuan. Untuk mengetahui informasi selengkapnya, lihat Mengedit tugas migrasi.
- Skema informasi (
Skema
Penamaan objek
Kunci utama
Jenis data
Posisi kolom ordinal
Nilai default
Nullability
Atribut identitas dan serial
Indeks sekunder
Metadata
Prosedur tersimpan
Fungsi
Pemicu
Tampilan
Batasan kunci asing
Migrasi berkelanjutan
Perubahan bahasa pengolahan data (DML) (seperti operasi INSERT,
UPDATE, dan DELETE pada tabel dengan kunci utama
atau identitas replika) direplikasi secara otomatis selama migrasi berkelanjutan.
Jika ada perubahan bahasa definisi data (DDL) pada database sumber selama proses migrasi, Anda harus mengupdate instance tujuan agar database tetap kompatibel. Anda dapat melakukan perubahan DDL dengan cara berikut:
Eksekusi DDL manual: Hentikan penulisan ke database sumber, jalankan perintah DDL di database sumber, dan jalankan perintah DDL yang cocok di database tujuan. Sebelum menjalankan perintah DDL di tujuan, berikan peran
cloudsqlexternalsynckepada pengguna Cloud SQL yang menerapkan perubahan.Perintah DDL yang direplikasi dengan
pglogical: Anda dapat menggunakanpglogical.replicate_ddl_commanduntuk menjalankan DDL di database sumber dan tujuan pada titik yang konsisten dalam aliran replikasi. Pengguna yang menjalankan perintah ini harus memiliki kredensial yang cocok di instance sumber dan tujuan, serta harus merupakan superuser atau pemilik objek yang diubah.
Tab berikut memberikan contoh perintah SQL untuk operasi DDL umum menggunakan pglogical.replicate_ddl_command:
Tabel dengan kunci utama
Menambahkan kolom ke tabel dengan kunci utama
SELECT pglogical.replicate_ddl_command( 'ALTER TABLE [SCHEMA].[TABLE_NAME] ADD COLUMN surname varchar(20)', '{default}' );
Mengubah nama tabel dengan kunci utama
SELECT pglogical.replicate_ddl_command( 'ALTER TABLE [SCHEMA].[TABLE_NAME] RENAME TO [NEW_NAME_FOR_TABLE]', '{default}' );
Membuat tabel dengan kunci utama
Jalankan perintah berikut di database sumber:
SELECT pglogical.replicate_ddl_command( command := 'CREATE TABLE [SCHEMA].[TABLE_NAME] (id INTEGER PRIMARY KEY, name VARCHAR);', replication_sets := ARRAY['default'] ); SELECT pglogical.replication_set_add_table('default', '[SCHEMA].[TABLE_NAME]');
Tabel tanpa kunci utama
Menambahkan kolom ke tabel tanpa kunci utama
SELECT pglogical.replicate_ddl_command( 'ALTER TABLE [SCHEMA].[TABLE_NAME] ADD COLUMN surname varchar(20)', '{default_insert_only}' );
Mengubah nama tabel tanpa kunci utama
SELECT pglogical.replicate_ddl_command( 'ALTER TABLE [SCHEMA].[TABLE_NAME] RENAME TO [NEW_NAME_FOR_TABLE]', '{default_insert_only}' );
Membuat tabel tanpa kunci utama
Jalankan perintah berikut di database sumber:
SELECT pglogical.replicate_ddl_command( command := 'CREATE TABLE [SCHEMA].[TABLE_NAME] (id INTEGER PRIMARY KEY, name VARCHAR);', replication_sets := ARRAY['default_insert_only'] ); SELECT pglogical.replication_set_add_table('default_insert_only', '[SCHEMA].[TABLE_NAME]');
Yang tidak dimigrasikan
Pengguna dan hak istimewa: Kredensial login dan peran pengguna tidak dimigrasikan. Untuk mengonfigurasi pengguna di instance tujuan, gunakan tab Users di konsol Google Cloud atau kelola pengguna menggunakan klien SQL. Untuk mengetahui informasi selengkapnya, lihat Membuat dan mengelola pengguna dalam dokumentasi Cloud SQL.
Ekstensi yang tidak didukung: Database Migration Service tidak memigrasikan ekstensi yang tidak didukung oleh Cloud SQL. Keberadaan ekstensi ini tidak memblokir tugas migrasi, tetapi aplikasi yang mereferensikan ekstensi yang tidak didukung mungkin mengalami error. Untuk mengetahui daftar ekstensi yang didukung, lihat ekstensi PostgreSQL dalam dokumentasi Cloud SQL.
Objek besar: Objek besar PostgreSQL (jenis data
oidyang merujuk kepg_largeobject) tidak direplikasi oleh decoding logis.Tabel tanpa kunci utama: Database Migration Service memigrasikan snapshot awal dan mereplikasi pernyataan
INSERTselama fase CDC. Untuk pernyataanUPDATEdanDELETE:Migrasi standar: Migrasi standar mengharuskan tabel Anda memiliki kunci utama untuk mereplikasi pernyataan
UPDATEdanDELETE.Migrasi mulai cepat: Dengan migrasi mulai cepat, kunci utama tidak diperlukan untuk mereplikasi operasi
UPDATEdanDELETEjika Anda menetapkan identitas replika keINDEXatauFULL. MengonfigurasiREPLICA IDENTITY FULLakan meningkatkan volume write-ahead log (WAL) dan overhead resource. Sebaiknya tambahkan kunci utama jika memungkinkan. Untuk mengetahui informasi selengkapnya, lihat dokumentasi Identitas Replika PostgreSQL dan Panduan migrasi cepat.
Tampilan terwujud: Database Migration Service memigrasikan definisi tampilan terwujud, tetapi tidak memigrasikan data yang di-cache yang mendasarinya. Untuk mengisi tampilan terwujud di tujuan, jalankan
REFRESH MATERIALIZED VIEW view_namesetelah migrasi.Status urutan: Nilai urutan saat ini (seperti
last_value) pada instance tujuan mungkin berbeda dari sumber selama CDC yang sedang berlangsung. Nilai urutan disinkronkan selama langkah promosi terakhir.Tablespace kustom: Cloud SQL tidak mendukung tablespace kustom. Objek yang ditentukan dalam tablespace kustom akan otomatis dipetakan ulang ke tablespace
pg_defaultdefault di Cloud SQL.
Langkah berikutnya
Untuk mengetahui detail batasan selengkapnya, lihat Batasan umum.
Untuk memulai panduan migrasi, lihat Memulai migrasi Cloud SQL untuk PostgreSQL.