PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bermigrasi dari DB2 ke PostgreSQL - Yang Harus Anda Ketahui

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

  1. Lisensi sumber terbuka yang fleksibel dan ketersediaan yang mudah dari penyedia cloud publik seperti AWS, Google cloud, Microsoft Azure.
  2. 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.

  1. 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.

  2. 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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tipe data Postgres ENUM atau CHECK CONSTRAINT?

  2. Perbedaan antara teks dan varchar (karakter bervariasi)

  3. Pustaka tidak dimuat:/usr/local/opt/readline/lib/libreadline.6.2.dylib

  4. Kesalahan dalam evolusi di Heroku

  5. Lewati parameter WHERE ke Tampilan PostgreSQL?