Ringkasan
Saat memigrasikan skema, data, dan metadata dari database sumber ke database tujuan, Anda ingin memastikan bahwa semua informasi ini dimigrasikan secara akurat. Database Migration Service menyediakan cara dengan fidelitas tinggi untuk memigrasikan objek database (termasuk skema, data, dan metadata) dari satu database ke database lainnya.
Selama proses migrasi, data dan batasan dimigrasikan secara terpisah. Data dimigrasikan terlebih dahulu, dan batasan seperti kunci utama, kunci asing, dan indeks dibuat ulang di instance setelah dump dan pemuatan penuh awal.Semua komponen data, skema, dan metadata berikut dimigrasikan sebagai bagian dari migrasi database:
Data
Semua tabel dari semua database dan skema, kecuali skema berikut:
- Skema informasi
information_schema
- Semua skema yang diawali dengan
pg
(misalnya,pg_catalog
)
Untuk mengetahui informasi selengkapnya tentang skema ini, lihat Keterbatasan yang telah diketahui.
- Skema informasi
Skema
Penamaan
Kunci utama
Jenis data
Posisi ordinal
Nilai default
Nullability
Atribut penambahan otomatis
Indeks sekunder
Metadata
Prosedur tersimpan
Functions
Pemicu
Dilihat
Batasan kunci asing
Migrasi berkelanjutan
Hanya perubahan bahasa pengolahan data (DML) yang diperbarui secara otomatis selama migrasi berkelanjutan. Mengelola perubahan bahasa definisi data (DDL) agar database sumber dan tujuan tetap kompatibel adalah tanggung jawab pengguna, dan dapat dilakukan dengan dua cara:
-
Menghentikan penulisan ke sumber dan menjalankan perintah DDL di sumber dan
tujuan. Sebelum menjalankan perintah DDL di tujuan, berikan
cloudsqlexternalsync
kepada pengguna Cloud SQL yang menerapkan perubahan DDL. Untuk mengaktifkan kueri atau mengubah data, berikan perancloudsqlexternalsync
kepada pengguna Cloud SQL yang relevan. - Menggunakan
pglogical.replicate_ddl_command
untuk memungkinkan DDL dijalankan di sumber dan tujuan pada titik yang konsisten. Pengguna yang menjalankan perintah ini harus memiliki nama pengguna yang sama di sumber dan tujuan, dan harus merupakan superuser atau pemilik artefak yang dimigrasikan (misalnya, tabel, urutan, tampilan, atau database).Berikut beberapa contoh penggunaan
pglogical.replicate_ddl_command
.Ganti:
[SCHEMA]
dengan nama skema tabel yang ingin Anda gunakan[TABLE_NAME]
dengan nama tabel[NEW_NAME_FOR_TABLE]
dengan nama baru untuk tabel saat melakukan operasi penggantian nama
Menambahkan kolom ke tabel database dengan kunci utama
select pglogical.replicate_ddl_command( 'ALTER TABLE [SCHEMA].[TABLE_NAME] add column surname varchar(20)', '{default}' );
Menambahkan kolom ke tabel database tanpa kunci utama
select pglogical.replicate_ddl_command( 'ALTER TABLE [SCHEMA].[TABLE_NAME] add column surname varchar(20)', '{default_insert_only}' );
Mengubah nama tabel database dengan kunci utama
select pglogical.replicate_ddl_command( 'ALTER TABLE [SCHEMA].[TABLE_NAME] RENAME TO [NEW_NAME_FOR_TABLE]', '{default}' );
Mengubah nama tabel database tanpa kunci utama
select pglogical.replicate_ddl_command( 'ALTER TABLE [SCHEMA].[TABLE_NAME] RENAME TO [NEW_NAME_FOR_TABLE]', '{default_insert_only}' );
Membuat tabel database dengan kunci utama
Jalankan perintah berikut:
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]');
Membuat tabel database tanpa kunci utama
Jalankan perintah berikut:
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
Untuk menambahkan pengguna ke instance tujuan Cloud SQL, buka instance dan tambahkan pengguna dari tab Pengguna, atau tambahkan dari klien PostgreSQL. Pelajari lebih lanjut cara membuat dan mengelola pengguna PostgreSQL.
Database Migration Service tidak memigrasikan ekstensi yang tidak didukung oleh Cloud SQL. Kehadiran ekstensi ini tidak memblokir migrasi, tetapi untuk memastikan proses migrasi berjalan lancar, pastikan objek atau aplikasi Anda tidak mereferensikan ekstensi yang tidak didukung. Sebaiknya hapus ekstensi dan referensi ini dari database sumber sebelum melanjutkan.
Objek besar tidak dapat direplikasi, karena fasilitas decoding logis PostgreSQL tidak mendukung perubahan decoding pada objek besar. Untuk tabel yang memiliki jenis kolom
oid
yang mereferensikan objek besar, baris akan disinkronkan, dan baris baru akan direplikasi. Namun, mencoba mengakses objek besar di database tujuan (baca menggunakanlo_get
, ekspor menggunakanlo_export
, atau periksapg_largeobject
katalog untukoid
yang diberikan), gagal dengan pesan yang menyatakan bahwa objek besar tidak ada.Untuk tabel yang tidak memiliki kunci utama, Database Migration Service mendukung migrasi snapshot awal dan pernyataan
INSERT
selama fase pengambilan data perubahan (CDC). Anda harus memigrasikan pernyataanUPDATE
danDELETE
secara manual.Database Migration Service tidak memigrasikan data dari tampilan yang diwujudkan, hanya skema tampilan. Untuk mengisi tampilan, jalankan perintah berikut:
REFRESH MATERIALIZED VIEW view_name
.Status
SEQUENCE
(misalnya,last_value
) di tujuan baru mungkin berbeda dari statusSEQUENCE
sumber.Tablespace yang disesuaikan tidak didukung di instance Cloud SQL tujuan. Semua data di dalam tablespace yang disesuaikan dimigrasikan ke tablespace
pg_default
default di Cloud SQL.