PostgreSQL vs MySQL: Kapan Saya Pilih yang Mana

Saya sering ditanya orang yang baru mulai freelance, “PostgreSQL apa MySQL, sih, buat project baru?” Jawaban jujurnya nggak sesimpel yang mereka harapin — saya udah pakai dua-duanya bertahun-tahun, dan saya nggak punya jawaban tunggal karena emang nggak ada.
Kasus yang paling nempel di ingatan: proyek dashboard internal buat klien yang awalnya saya bikin di MySQL karena hosting yang mereka udah punya emang MySQL-only (shared hosting lama, bukan VPS). Beberapa bulan jalan, mereka minta fitur laporan yang butuh nested JSON buat nyimpen konfigurasi form yang dinamis per user. MySQL bisa handle JSON, tapi query-nya jadi ribet banget dibanding kalau saya pakai JSONB-nya PostgreSQL yang punya indexing dan operator query yang jauh lebih nyaman. Saya nggak migrasi database-nya (terlalu berisiko buat sistem yang udah jalan), tapi itu jadi pelajaran: kalau saya udah nebak bakal butuh struktur data yang fleksibel dari awal, saya harusnya mulai dari Postgres.
Kapan saya pilih PostgreSQL
- Butuh tipe data yang lebih kaya — JSON/JSONB native dengan indexing yang beneran cepat, array, custom types
- Query-nya bakal kompleks, banyak join dan aggregation yang butuh window function atau CTE
- Butuh full-text search bawaan tanpa nambah Elasticsearch atau tools terpisah cuma buat search sederhana
- Proyeknya bakal deploy ke Supabase atau platform yang emang PostgreSQL-native dari awal
Kapan saya pilih MySQL
- Hosting atau environment target-nya emang lebih murah/familiar buat MySQL — ini masih sering kejadian di project klien kecil yang shared hosting-nya legacy
- Tim yang bakal maintain nantinya lebih terbiasa MySQL, dan saya nggak akan jadi orang yang pegang proyeknya selamanya
- Kebutuhannya straightforward — CRUD standar, laporan sederhana, nggak ada query yang beneran njelimet
Dari sisi performa mentah, saya jarang nemu perbedaan yang beneran kerasa buat aplikasi skala kecil-menengah yang saya kerjain — indexing yang bener dan schema design yang masuk akal jauh lebih nentuin dibanding engine mana yang dipakai. Saya pernah liat query MySQL yang lambat banget bukan karena MySQL-nya jelek, tapi karena nggak ada index sama sekali di kolom yang di-filter. Ganti ke Postgres nggak bakal nolongin masalah kayak gitu.
Kalau saya harus pilih satu default buat proyek baru tanpa constraint khusus dari klien, saya sekarang condong ke PostgreSQL. Bukan karena MySQL jelek — saya masih pakai itu di beberapa proyek lama yang emang udah jalan di situ — tapi karena fleksibilitas tipe data dan fitur-fiturnya bikin saya nggak perlu mikir ulang kalau requirement-nya berubah di tengah jalan, dan requirement klien hampir selalu berubah di tengah jalan.