Baik memigrasi database atau aplikasi dari DB2 ke PostgreSQL dengan hanya satu jenis pengetahuan database saja tidak cukup, ada beberapa hal yang perlu diketahui tentang perbedaan antara kedua sistem database.
PostgreSQL adalah database open source canggih yang paling banyak digunakan di dunia. Database PostgreSQL memiliki kumpulan fitur yang kaya dan komunitas PostgreSQL sangat kuat dan mereka terus meningkatkan fitur yang ada dan menambahkan fitur baru. Sesuai dengan db-engine.com, PostgreSQL adalah DBMS tahun 2017 dan 2018.
Seperti yang Anda ketahui DB2 dan PostgreSQL adalah RDBMS tetapi ada beberapa yang tidak kompatibel. Di blog ini, kita dapat melihat beberapa ketidaksesuaian ini.
Mengapa Bermigrasi Dari DB2 ke PostgreSQL
- Lisensi sumber terbuka yang fleksibel dan ketersediaan yang mudah dari penyedia cloud publik seperti AWS, Google cloud, Microsoft Azure.
- Manfaatkan add-on open source untuk meningkatkan kinerja database.
Anda dapat melihat pada gambar di bawah bahwa popularitas PostgreSQL meningkat dari waktu ke waktu dibandingkan dengan DB2.
Bunga Seiring Waktu
Penilaian Migrasi
Langkah pertama migrasi adalah menganalisis aplikasi dan objek database, mengetahui ketidaksesuaian antara kedua database dan memperkirakan waktu dan biaya yang diperlukan untuk migrasi.
Pemetaan Tipe Data
Beberapa tipe data IBM DB2 tidak cocok secara langsung dengan tipe data PostgreSQL, jadi Anda perlu mengubahnya ke tipe data PostgreSQL yang sesuai.
Silakan periksa tabel di bawah ini.
IBM DB2 | PostgreSQL | |
BESAR | Integer 64-bit | BESAR |
BLOB(n) | Objek biner besar | BYTEA |
CLOB(n) | Karakter objek besar | TEKS |
DBCLOB(n) | Objek besar karakter UTF-16 | TEKS |
NCLOB(n) | Objek besar karakter UTF-16 | TEKS |
CHAR(n), CHARACTER(n) | String dengan panjang tetap | CHAR(n) |
VARIASI KARAKTER(n) | String dengan panjang variabel | VARCHAR(n) |
NCHAR(n) | String UTF-16 dengan panjang tetap | CHAR(n) |
VARIASI NCHAR(n) | String UTF-16 dengan panjang variabel | VARCHAR(n) |
VARCHAR(n) | String dengan panjang variabel | VARCHAR(n) |
VARGRAFIS(n) | String UTF-16 dengan panjang variabel | VARCHAR(n) |
VARCHAR(n) UNTUK BIT DATA | String byte dengan panjang variabel | BYTEA |
NVARCHAR(n) | String UTF-16 dengan panjang bervariasi | VARCHAR(n) |
GRAFIS(n) | String UTF-16 dengan panjang tetap | CHAR(n) |
BATABATA | Integer 32-bit | BINTANG |
NUMERIK(p,s) | Nomor poin tetap | NUMERIK(p,s) |
DECIMAL(p,s) | Nomor poin tetap | DECIMAL(p,s) |
PRESISI GANDA | Angka floating point presisi ganda | PRESISI GANDA |
FLOAT(p) | Angka floating point presisi ganda | PRESISI GANDA |
NYATA | Angka titik mengambang presisi tunggal | NYATA |
KECIL | Bilangan bulat 16-bit | KECIL |
TANGGAL | Tanggal (tahun, bulan dan hari) | TANGGAL |
WAKTU | TIME (jam, menit, dan detik) | TIME(0) |
TIMESTAMP(p) | Tanggal dan waktu dengan pecahan | TIMESTAMP(p) |
DECFLOAT(16 | 34) | Nomor titik mengambang IEEE | FLOAT |
Inkompatibilitas dalam DB2 dan PostgreSQL
Ada banyak ketidaksesuaian yang ada di DB2 dan PostgreSQL, Anda dapat melihat beberapa di antaranya di sini. Anda dapat mengotomatiskannya dengan membuat ekstensi sehingga Anda dapat menggunakan fungsi DB2 seperti di PostgreSQL dan Anda dapat menghemat waktu Anda. Silakan periksa perilaku fungsi DB2 di PostgreSQL
TABLESPACE
Klausa TABLESPACE mendefinisikan nama tablespace tempat tabel yang baru dibuat berada.
DB2 menggunakan klausa IN untuk TABLESPACE sehingga harus diganti dengan klausa TABLESPACE di PostgreSQL.
Contoh:
DB2:
IN <tablespace_name>
PostgreSQL:
TABLESPACE <tablespace_name>
HANYA PENGAMBILAN DAN BARIS PERTAMA
Di DB2, Anda dapat menggunakan klausa FETCH FIRST n ROWS ONLY untuk mengambil tidak lebih dari n baris. Di PostgreSQL, Anda dapat menggunakan LIMIT n yang setara dengan FETCH FIRST n ROWS ONLY.
Contoh:
DB2:
SELECT * FROM EMP
ORDER BY EMPID
FETCH FIRST 10 ROWS ONLY;
PostgreSQL:
SELECT * FROM EMP
ORDER BY EMPID
LIMIT 10;
DIHASILKAN OLEH DEFAULT SEBAGAI IDENTITAS
Kolom IDENTITY di DB2 dapat diganti dengan kolom Serial di PostgreSQL.
DB2:
CREATE TABLE <table_name> (
<column_name> INTEGER NOT NULL
GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1, CACHE 20)
);
PostgreSQL:
CREATE TABLE <table_name> (
<column_name> SERIAL NOT NULL
);
Pilih dari SYSIBM.SYSDUMMY1
Tidak ada tabel “SYSIBM.SYSDUMMY1” di PostgreSQL. PostgreSQL mengizinkan klausa "PILIH" tanpa klausa "FROM". Anda dapat menghapus ini dengan menggunakan skrip.
Fungsi Skalar:DB2 vs PostgreSQL
CEIL/CEILING
CEIL atau CEILING mengembalikan nilai integer terkecil berikutnya yang lebih besar dari atau sama dengan input (mis. CEIL(122.89) mengembalikan 123, juga CEIL(122.19) mengembalikan 123).
DB2:
SELECT CEIL(123.89) FROM SYSIBM.SYSDUMMY1;
SELECT CEILING(123.89) FROM SYSIBM.SYSDUMMY1;
PostgreSQL:
SELECT CEIL(123.89) ;
SELECT CEILING(123.89) ;
TANGGAL
Ini mengubah input menjadi nilai tanggal. Anda dapat mengonversi fungsi DATE ke fungsi TO_DATE di PostgreSQL.
DB2:
SELECT DATE ('2018-09-21') FROM SYSIBM.SYSDUMMY1;
PostgreSQL:
SELECT TO_DATE ('21-09-2018',’DD-MM-YYYY’) ;
HARI
Ini mengembalikan hari (hari dalam sebulan) bagian dari tanggal atau nilai yang setara. Format keluarannya adalah bilangan bulat.
DB2:
SELECT DAY (DATE('2016-09-21')) FROM SYSIBM.SYSDUMMY1;
PostgreSQL:
SELECT DATE_PART('day', '2016- 09-21'::date);
BULAN
Ini mengembalikan bagian bulan dari nilai tanggal. Format keluarannya adalah bilangan bulat.
DB2:
SELECT MONTH (DATE('2016-09-21')) FROM SYSIBM.SYSDUMMY1;
PostgreSQL:
SELECT DATE_PART ('month', '2016-09- 21'::date);
POSSTR
Mengembalikan posisi string. Fungsi POSSTR digantikan oleh fungsi POSISI di PostgreSQL.
DB2:
Usage : POSSTR(<Filed_1>,<Field2>)
SELECT POSSTR('PostgreSQL and DB2', 'and') FROM SYSIBM.SYSDUMMY1;
PostgreSQL:
Usage: POSITION(<Field_1> IN<Field_2>)
SELECT POSITION('and' IN'PostgreSQL and DB2');
RAND
Ini mengembalikan nilai titik-mengambang pseudorandom dalam kisaran nol hingga satu inklusif. Anda dapat mengganti fungsi RAND menjadi RANDOM di PostgreSQL.
DB2:
SELECT RAND() FROM SYSIBM.SYSDUMMY1;
PostgreSQL:
SELECT RANDOM();
Unduh Whitepaper Hari Ini Pengelolaan &Otomatisasi PostgreSQL dengan ClusterControlPelajari tentang apa yang perlu Anda ketahui untuk menerapkan, memantau, mengelola, dan menskalakan PostgreSQLUnduh Whitepaper Alat
Anda dapat menggunakan beberapa alat untuk memigrasi database DB2 ke PostgreSQL. Silakan uji alat ini sebelum menggunakannya.
-
Db2topg
Ini adalah alat otomatis untuk migrasi DB2 ke PostgreSQL seperti ora2pg. Skrip di alat db2pg mengonversi sebanyak mungkin database DB2 UDB. Alat ini tidak bekerja dengan DB2 zOS. Ini sangat mudah digunakan, Anda memerlukan dump SQL dari skema Anda dan kemudian menggunakan skrip db2pg untuk mengubahnya menjadi skema PostgreSQL.
-
Konversi penuh
Alat perusahaan dengan cepat menyalin database DB2 ke PostgreSQL. Konversi database DB2 ke PostgreSQL menggunakan alat Full Convert sangat sederhana.
Langkah-langkahnya:- Hubungkan ke database sumber yaitu DB2
- Opsional:Pilih tabel yang ingin Anda konversi (secara default semua tabel dipilih)
- Mulai konversi.
Kesimpulan
Seperti yang bisa kita lihat, migrasi dari DB2 ke PostgreSQL bukanlah ilmu roket, tapi kita perlu mengingat hal yang kita lihat sebelumnya untuk menghindari masalah besar di sistem kita. Jadi, kita hanya perlu berhati-hati dalam tugas dan melanjutkan, Anda dapat bermigrasi ke database open source paling canggih dan memanfaatkan manfaatnya.