Migrasikan kolom virtual yang dihasilkan dari Oracle ke PostgreSQL - AWS Prescriptive Guidance

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

Migrasikan kolom virtual yang dihasilkan dari Oracle ke PostgreSQL

Veeranjaneyulu Grandhi, Rajesh Madiwale, dan Ramesh Pathuri, Amazon Web Services

Ringkasan

Di versi 11 dan sebelumnya, PostgreSQL tidak menyediakan fitur yang secara langsung setara dengan kolom virtual Oracle. Menangani kolom virtual yang dihasilkan saat bermigrasi dari Oracle Database ke PostgreSQL versi 11 atau sebelumnya sulit karena dua alasan: 

  • Kolom virtual tidak terlihat selama migrasi.

  • PostgreSQL tidak mendukung generate ekspresi sebelum versi 12.

Namun, ada solusi untuk meniru fungsionalitas serupa. Bila Anda menggunakan AWS Database Migration Service (AWS DMS) untuk memigrasikan data dari Oracle Database ke PostgreSQL versi 11 dan yang lebih lama, Anda dapat menggunakan fungsi pemicu untuk mengisi nilai dalam kolom virtual yang dihasilkan. Pola ini memberikan contoh Oracle Database dan kode PostgreSQL yang dapat Anda gunakan untuk tujuan ini. Di AWS, Anda dapat menggunakan Amazon Relational Database Service (Amazon RDS) untuk PostgreSQL atau Amazon Aurora PostgreSQL Edisi yang kompatibel dengan PostgreSQL untuk database PostgreSQL Anda.

Dimulai dengan PostgreSQL versi 12, kolom yang dihasilkan didukung. Kolom yang dihasilkan dapat dihitung dari nilai kolom lain dengan cepat, atau dihitung dan disimpan. Kolom yang dihasilkan PostgreSQL mirip dengan kolom virtual Oracle.

Prasyarat dan batasan

Prasyarat

  • Akun AWS yang aktif

  • Database Oracle sumber

  • Target database PostgreSQL (di Amazon RDS untuk PostgreSQL atau Aurora PostgreSQL yang kompatibel dengan Aurora)

  • Keahlian pengkodean PL/PGSQL

Batasan

  • Berlaku hanya untuk versi PostgreSQL sebelum versi 12. 

  • Berlaku untuk Oracle Database versi 11g atau yang lebih baru.

  • Kolom virtual tidak didukung dalam alat migrasi data.

  • Berlaku hanya untuk kolom yang didefinisikan dalam tabel yang sama.

  • Jika kolom yang dihasilkan virtual mengacu pada fungsi deterministik yang ditentukan pengguna, itu tidak dapat digunakan sebagai kolom kunci partisi.

  • Output dari ekspresi harus berupa nilai skalar. Itu tidak dapat mengembalikan tipe data yang disediakan Oracle, tipe yang ditentukan pengguna, atau. LOB LONG RAW

  • Indeks yang didefinisikan terhadap kolom virtual setara dengan indeks berbasis fungsi di PostgreSQL.

  • Statistik tabel harus dikumpulkan.

Alat

  • pgAdmin 4 adalah alat manajemen open source untuk PostgreSQL. Alat ini menyediakan antarmuka grafis yang menyederhanakan pembuatan, pemeliharaan, dan penggunaan objek database.

  • Oracle SQL Developer adalah lingkungan pengembangan terintegrasi gratis untuk bekerja dengan SQL di database Oracle baik dalam penerapan tradisional maupun cloud. 

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Buat tabel Database Oracle sumber.

Di Oracle Database, buat tabel dengan kolom virtual yang dihasilkan dengan menggunakan pernyataan berikut.

CREATE TABLE test.generated_column ( CODE NUMBER, STATUS VARCHAR2(12) DEFAULT 'PreOpen', FLAG CHAR(1) GENERATED ALWAYS AS (CASE UPPER(STATUS) WHEN 'OPEN' THEN 'N' ELSE 'Y' END) VIRTUAL VISIBLE );

Dalam tabel sumber ini, data di STATUS kolom dimigrasikan melalui AWS DMS ke database target. FLAGKolom, bagaimanapun, diisi dengan menggunakan generate by fungsionalitas, sehingga kolom ini tidak terlihat oleh AWS DMS selama migrasi. Untuk mengimplementasikan fungsionalitasgenerated by, Anda harus menggunakan pemicu dan fungsi dalam database target untuk mengisi nilai di FLAG kolom, seperti yang ditunjukkan dalam epik berikutnya.

DBA, Pengembang aplikasi

Buat tabel PostgreSQL target di AWS.

Buat tabel PostgreSQL di AWS dengan menggunakan pernyataan berikut.

CREATE TABLE test.generated_column ( code integer not null, status character varying(12) not null , flag character(1) );

Dalam tabel ini, status kolom adalah kolom standar. flagKolom akan menjadi kolom yang dihasilkan berdasarkan data di status kolom.

DBA, Pengembang aplikasi
TugasDeskripsiKeterampilan yang dibutuhkan

Buat pemicu PostgreSQL.

Di PostgreSQL, buat pemicu.

CREATE TRIGGER tgr_gen_column AFTER INSERT OR UPDATE OF status ON test.generated_column FOR EACH ROW EXECUTE FUNCTION test.tgf_gen_column();
DBA, Pengembang aplikasi

Buat fungsi pemicu PostgreSQL.

Di PostgreSQL, buat fungsi untuk pemicu. Fungsi ini mengisi kolom virtual yang disisipkan atau diperbarui oleh aplikasi atau AWS DMS, dan memvalidasi data.

CREATE OR REPLACE FUNCTION test.tgf_gen_column() RETURNS trigger AS $VIRTUAL_COL$ BEGIN IF (TG_OP = 'INSERT') THEN IF (NEW.flag IS NOT NULL) THEN RAISE EXCEPTION 'ERROR: cannot insert into column "flag"' USING DETAIL = 'Column "flag" is a generated column.'; END IF; END IF; IF (TG_OP = 'UPDATE') THEN IF (NEW.flag::VARCHAR != OLD.flag::varchar) THEN RAISE EXCEPTION 'ERROR: cannot update column "flag"' USING DETAIL = 'Column "flag" is a generated column.'; END IF; END IF; IF TG_OP IN ('INSERT','UPDATE') THEN IF (old.flag is NULL) OR (coalesce(old.status,'') != coalesce(new.status,'')) THEN UPDATE test.generated_column SET flag = (CASE UPPER(status) WHEN 'OPEN' THEN 'N' ELSE 'Y' END) WHERE code = new.code; END IF; END IF; RETURN NEW; END $VIRTUAL_COL$ LANGUAGE plpgsql;
DBA, Pengembang aplikasi
TugasDeskripsiKeterampilan yang dibutuhkan

Buat contoh replikasi.

Untuk membuat instance replikasi, ikuti petunjuk dalam dokumentasi AWS DMS. Instans replikasi harus berada di cloud pribadi virtual (VPC) yang sama dengan basis data sumber dan target Anda.

DBA, Pengembang aplikasi

Buat titik akhir sumber dan target.

Untuk membuat titik akhir, ikuti petunjuk dalam dokumentasi AWS DMS.

DBA, Pengembang aplikasi

Uji koneksi titik akhir.

Anda dapat menguji koneksi titik akhir dengan menentukan VPC dan instance replikasi dan memilih Run test.

DBA, Pengembang aplikasi

Buat dan mulai tugas beban penuh.

Untuk petunjuknya, lihat Membuat Tugas dan setelan tugas beban penuh dalam dokumentasi AWS DMS.

DBA, Pengembang aplikasi

Validasi data untuk kolom virtual.

Bandingkan data di kolom virtual di database sumber dan target. Anda dapat memvalidasi data secara manual atau menulis skrip untuk langkah ini.

DBA, Pengembang aplikasi

Sumber daya terkait