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.
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
alloydbexternalsync
kepada pengguna AlloyDB yang menerapkan perubahan DDL. Untuk mengaktifkan kueri atau mengubah data, berikan peranalloydbexternalsync
kepada pengguna AlloyDB 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
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.