Fidelitas migrasi

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

  • 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:

  1. 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 cloudsqlexternalsync kepada pengguna Cloud SQL yang menerapkan perubahan.

  2. Perintah DDL yang direplikasi dengan pglogical: Anda dapat menggunakan pglogical.replicate_ddl_command untuk 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 oid yang merujuk ke pg_largeobject) tidak direplikasi oleh decoding logis.

  • Tabel tanpa kunci utama: Database Migration Service memigrasikan snapshot awal dan mereplikasi pernyataan INSERT selama fase CDC. Untuk pernyataan UPDATE dan DELETE:

    • Migrasi standar: Migrasi standar mengharuskan tabel Anda memiliki kunci utama untuk mereplikasi pernyataan UPDATE dan DELETE.

    • Migrasi mulai cepat: Dengan migrasi mulai cepat, kunci utama tidak diperlukan untuk mereplikasi operasi UPDATE dan DELETE jika Anda menetapkan identitas replika ke INDEX atau FULL. Mengonfigurasi REPLICA IDENTITY FULL akan 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_name setelah 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_default default di Cloud SQL.

Langkah berikutnya