Seperti yang Anda ketahui, Microsoft SQL Server adalah RDBMS yang sangat populer dengan lisensi yang sangat ketat dan biaya kepemilikan yang tinggi jika database berukuran signifikan, atau digunakan oleh sejumlah besar klien. Ini menyediakan antarmuka yang sangat ramah pengguna dan mudah dipelajari. Ini menghasilkan basis pengguna yang besar.
PostgreSQL adalah database open source tercanggih di dunia. Komunitas PostgreSQL sangat kuat dan terus meningkatkan fitur yang ada dan mengimplementasikan fitur baru. Sesuai peringkat popularitas mesin db, PostgreSQL adalah DBMS tahun 2017.
Mengapa Bermigrasi dari MS SQL Server ke PostgreSQL?
- MS SQL Server adalah database berpemilik dari Microsoft, sedangkan PostgreSQL dikembangkan dan dikelola oleh komunitas global pengembang open source. Jika biaya menjadi masalah, maka Anda harus menggunakan PostgreSQL. Anda dapat memeriksa harganya di sini.
- PostgreSQL adalah mesin database lintas platform dan tersedia untuk Windows, Mac, Solaris, FreeBSD dan Linux sementara SQL Server hanya berjalan pada sistem operasi Windows. Seperti yang Anda ketahui, PostgreSQL adalah open source dan sepenuhnya gratis, sedangkan biaya MSSQL Server bergantung pada jumlah pengguna dan ukuran database.
- Lisensi open source yang fleksibel dan ketersediaan yang mudah dari penyedia cloud publik seperti AWS, Google cloud, dll.
- Manfaatkan add-on open source untuk meningkatkan kinerja.
Yang Harus Anda Ketahui
Meskipun database Microsoft SQL Server dan database PostgreSQL sesuai dengan ANSI-SQL tetapi masih ada perbedaan antara sintaks SQL, tipe data, sensitivitas huruf besar-kecil, dan itu membuat transfer data tidak begitu sepele.
Sebelum migrasi, pahami perbedaan antara MSSQL dan PostgreSQL. Ada banyak fitur di kedua database sehingga Anda harus mengetahui perilaku fitur/fungsi tersebut di MSSQL dan PostgreSQL. Harap periksa beberapa perbedaan penting yang harus Anda ketahui sebelum migrasi.
Pemetaan Tipe Data
Beberapa tipe data MSSQL tidak cocok secara langsung dengan tipe data PostgreSQL, jadi Anda perlu mengubahnya ke tipe data PostgreSQL yang sesuai.
Silakan periksa tabel di bawah ini.
Microsoft SQL Server | PostgreSQL | |
---|---|---|
BESAR | Integer 64-bit | BESAR |
BINARY(n) | String byte dengan panjang tetap | BYTEA |
BIT | 1, 0 atau NULL | BOOLEAN |
CHAR(n) | String karakter dengan panjang tetap, 1 <=n <=8000 | CHAR(n) |
VARCHAR(n) | Panjang variabel string karakter, 1 <=n <=8000 | VARCHAR(n) |
VARCHAR(maks) | String karakter dengan panjang variabel, <=2GB | TEKS |
VARBINARY(n) | Panjang variabel byte string, 1 <=n <=8000 | BYTEA |
VARBINARY(maks) | Panjang variabel byte string , <=2GB | BYTEA |
NVARCHAR(n) | Panjang variabel Unicode UCS-2 string | VARCHAR(n) |
NVARCHAR(maks) | Panjang variabel data Unicode UCS-2, <=2GB | TEKS |
TEKS | Data karakter panjang variabel, <=2GB | TEKS |
NTEXT | Panjang variabel data Unicode UCS-2, <=2GB | TEKS |
PRESISI GANDA | Angka floating point presisi ganda | PRESISI GANDA |
FLOAT(p) | Angka titik mengambang | PRESISI GANDA |
BATABATA | Integer 32 bit | BATA BATA |
NUMERIK(p,s) | Nomor poin tetap | NUMERIK(p,s) |
TANGGAL | Tanggal termasuk tahun, bulan dan hari | TANGGAL |
DATETIME | Tanggal dan Waktu dengan pecahan | TIMESTAMP(3) |
DATETIME2(p) | Tanggal dan Waktu dengan pecahan | TIMESTAMP(n) |
DATETIMEOFFSET(p) | Tanggal dan Waktu dengan pecahan dan zona waktu | TIMESTAMP(p) DENGAN ZONA WAKTU |
SALLDATETIME | Tanggal dan Waktu | TIMESTAMP(0) |
TINYINT | 8 bit unsigned integer, 0 hingga 255 | KECIL |
UNIQUEIDENTIFIER | Data GUID(UUID) 16 byte | CHAR(16) |
VERSI ROW | Data biner diperbarui secara otomatis | BYTEA |
UANG KECIL | Jumlah mata uang 32 bit | UANG |
GAMBAR | Data biner dengan panjang variabel, <=2GB | BYTEA |
Inkompatibilitas dalam MS SQL Server dan PostgreSQL
Ada banyak ketidaksesuaian yang ada di MS SQL Server dan PostgreSQL, Anda dapat melihat beberapa di antaranya di sini. Anda dapat mengotomatiskannya dengan membuat ekstensi sehingga Anda dapat menggunakan fungsi MS SQL Server seperti yang ada di PostgreSQL dan Anda dapat menghemat waktu Anda.
DATEPART
DATEPART harus diganti dengan DATE_PART di PostgreSQL.
Contoh
MS SQL:
DATEPART( datepart , date )
PostgreSQL:
date_part( text , timestamp )
date_part( text , interval )
ISNULL
Fungsi ISNULL harus diganti dengan fungsi COALESCE di PostgreSQL.
Contoh
MS SQL Server:
ISNULL(exp, replacement)
PostgreSQL:
COALESCE(exp, replacement)
SPASI
Fungsi SPACE di MS SQL Server harus diganti dengan fungsi REPEAT di PostgreSQL.
Contoh
MS SQL Server:
SPACE($n)
Dimana $n adalah jumlah spasi yang akan dikembalikan.
PostgreSQL:
REPEAT(‘ ’, $n)
DATEADD
PostgreSQL tidak menyediakan fungsi DATEADD yang mirip dengan MS SQL Server, Anda dapat menggunakan aritmatika datetime dengan literal interval untuk mendapatkan hasil yang sama.
Contoh
MS SQL Server:
--Add 2 day to the current date
SELECT DATEADD(day, 2, GETDATE());
PostgreSQL:
--Add 2 day to the current date
SELECT CURRENT_DATE + INTERVAL ‘2 day’;
Penggabungan String
MS SQL Server menggunakan '+' untuk Penggabungan String sedangkan PostgreSQL menggunakan '||' untuk hal yang sama.
Contoh
MS SQL Server:
SELECT FirstName + LastName FROM employee;
PostgreSQL:
SELECT FirstName || LastName FROM employee;
CHARINDEX
Ada fungsi CHARINDEX di PostgreSQL. Anda dapat mengganti fungsi ini dengan fungsi POSITION setara PostgreSQL.
Contoh
MS SQL Server:
SELECT CHARINDEX('our', 'resource');
PostgreSQL:
SELECT POSITION('our' in 'resource');
GETDATE
Fungsi GETDATE mengembalikan tanggal dan waktu saat ini. Tidak ada fungsi GETDATE di PostgreSQL, tetapi ada fungsi SEKARANG() untuk tujuan yang sama. Jika ada beberapa kemunculan fungsi GETDATE maka Anda dapat mengotomatiskannya menggunakan ekstensi. Silakan periksa cara membuat modul menggunakan ekstensi.
Contoh
MS SQL Server:
SELECT GETDATE();
PostgreSQL:
SELECT NOW();
Alat
Anda dapat menggunakan beberapa alat untuk memigrasikan database MS SQL Server ke PostgreSQL. Silakan uji alat ini sebelum menggunakannya.
-
Pgloader
Anda dapat menggunakan alat pgloader untuk memigrasi database MS SQL ke PostgreSQL. Perintah di pgloader memuat data dari database MS SQL. Pgloader mendukung penemuan skema secara otomatis, termasuk pembuatan indeks, kunci utama, dan batasan kunci asing.
Pgloader menyediakan berbagai aturan casting yang dapat mengubah tipe data MS SQL menjadi tipe data PostgreSQL.
-
Sqlserver2pgsql
Ini adalah alat migrasi sumber terbuka lainnya untuk mengubah database Microsoft SQL Server menjadi database PostgreSQL, seotomatis mungkin. Sqlserver2pgsql ditulis dalam Perl.
Alat Sqlserver2pgsql melakukan dua hal:
- Ini mengubah skema SQL Server menjadi skema PostgreSQL
- Dapat menghasilkan jib Pentaho Data Integrator (Kettle) untuk memindahkan semua data dari SQL Server ke PostgreSQL. Ini adalah bagian opsional.
Pengujian
Menguji aplikasi dan database yang dimigrasikan sangat penting karena beberapa fungsi di kedua database sama, namun perilakunya berbeda.
Beberapa skenario umum perlu diperiksa:
- Periksa apakah semua objek database telah dikonversi dengan benar atau tidak.
- Periksa perilaku semua fungsi di DML berfungsi dengan benar atau tidak.
- Muat data sampel ke kedua database dan periksa hasil semua kueri DML di kedua database. Hasil dari semua SQL harus sama.
- Periksa kinerja DML dan tingkatkan jika perlu.