Panduan Troubleshooting PostgreSQL pada Lingkungan Pengembangan Lokal ServBay macOS
PostgreSQL adalah sistem basis data relasional objek open-source yang tangguh dan kaya fitur, digunakan secara luas di berbagai aplikasi web dan skenario penyimpanan data. Sebagai salah satu inti paket perangkat lunak di ServBay untuk lingkungan pengembangan lokal, PostgreSQL umumnya berjalan stabil. Namun, pada situasi tertentu, Anda mungkin menemui masalah seperti PostgreSQL gagal mulai, koneksi ditolak, performa menurun, atau keanehan dalam akses data.
Dokumen ini bertujuan memberi pedoman troubleshooting PostgreSQL yang terperinci bagi pengembang yang menggunakan ServBay. Kami menyajikan masalah-masalah umum yang ditemui pada PostgreSQL di lingkungan ServBay beserta langkah diagnostik dan solusinya. Perlu diperhatikan, ServBay berjalan di macOS dan mengintegrasikan beberapa versi paket PostgreSQL, sehingga saat melakukan diagnosis atau perbaikan, Anda mungkin perlu menentukan nomor versi, berkas konfigurasi, atau jalur direktori data tertentu.
Ringkasan
Panduan ini berfokus pada masalah teknis yang dapat dialami saat mengelola dan menggunakan PostgreSQL di lingkungan ServBay. Kita mulai membahas masalah paling umum terkait startup dan koneksi, lalu masuk ke ranah performa, crash tak terduga, serta backup dan pemulihan yang lebih kompleks. Dengan mengikuti langkah-langkah di dokumen ini, Anda dapat mendiagnosis dan menyelesaikan sebagian besar masalah PostgreSQL secara sistematis.
Prasyarat
Sebelum melakukan troubleshooting, pastikan Anda telah memenuhi syarat berikut:
- ServBay sudah berhasil terinstal dan dijalankan.
- Versi paket PostgreSQL yang ingin di-troubleshoot sudah terinstal melalui ServBay.
- Anda punya pemahaman dasar tentang command line di macOS.
- Anda mengetahui jalur konfigurasi dan data directory PostgreSQL Anda (umumnya di
/Applications/ServBay/db/postgresql/<version>
). - Anda mengetahui nama database, username, serta password yang hendak digunakan.
Masalah Umum & Solusi
1. Paket PostgreSQL Tidak Bisa Dimulai
Jika saat mencoba menjalankan PostgreSQL lewat ServBay statusnya tetap “stopped” atau “failed”, kemungkinan penyebabnya di bawah ini.
Kemungkinan Penyebab
- File konfigurasi mengandung kesalahan sintaks atau konflik pengaturan.
- Port yang digunakan PostgreSQL (default 5432) sudah dipakai proses lain.
- Direktori data, file konfigurasi, atau folder terkait ServBay/PostgreSQL tidak punya hak baca/tulis yang diperlukan.
- Direktori data PostgreSQL rusak.
- Masalah internal manajemen di ServBay.
Solusi
Cek status dan log di GUI ServBay: Pertama, buka aplikasi ServBay dan cek status paket PostgreSQL. Jika ada keanehan, coba start manual via GUI. Lihat log utama ServBay atau log khusus PostgreSQL (jika tersedia di GUI). Log ServBay biasanya ada di folder
/Applications/ServBay/logs/
. Periksa filepostgresql/<version>/postgresql-<version>.log
untuk detail error startup.Cek file konfigurasi: File konfigurasi utama PostgreSQL adalah
postgresql.conf
. Pastikan sintaksisnya benar, tidak ada typo atau setting tidak valid. Untuk PostgreSQL v13 di ServBay:bash/Applications/ServBay/db/postgresql/13/postgresql.conf
1File lain yang penting,
pg_hba.conf
, mengatur otentikasi klien. Konfigurasi yang salah bisa membuat koneksi gagal, bahkan menghalangi startup jika butuh internal connection check. Biasanya lokasinya sama denganpostgresql.conf
.Sebenarnya, PostgreSQL tidak menyediakan command line khusus untuk “memvalidasi” seluruh file konfigurasi, tapi Anda bisa menemukan error saat load konfigurasi lewat log. Sebagai alternatif, gunakan
psql
pada database yang sudah berjalan (mungkin versi berbeda/instansi sementara) untuk cek setting. Namun, cara paling sederhana tetap lewat pengecekan log error.Untuk
pg_hba.conf
, setelah terkoneksi, cek aturan-aturannya:sql-- Perlu koneksi ke database untuk menjalankan ini SELECT * FROM pg_hba_file_rules();
1
2Untuk menemukan error saat load file konfigurasi:
sql-- Perlu koneksi ke database SELECT sourcefile, name, sourceline, error FROM pg_file_settings WHERE error IS NOT null;
1
2Catatan: Perintah SQL di atas hanya bisa dijalankan kalau PostgreSQL sudah berhasil start. Untuk kasus gagal startup, penelusuran pada file log adalah langkah terpenting.
Cek penggunaan port: PostgreSQL default pada port 5432. Jika port sudah dipakai proses lain, tidak bisa start. Cek dengan:
bashlsof -i :5432
1Jika ada output, berarti port sedang digunakan proses lain. Cek PID, pertimbangkan untuk menghentikan proses tersebut, atau ubah pengaturan port pada
postgresql.conf
kemudian reload/restart lewat GUI atau perintahservbayctl
.Cek permission folder/file: ServBay membutuhkan hak baca/tulis di direktori instalasi dan subfoldernya. Direktori data dan file konfigurasi PostgreSQL juga wajib bisa diakses proses ServBay (biasanya menggunakan user Anda). Pastikan Anda punya permission penuh untuk
/Applications/ServBay/
dan isi di dalamnya. Gunakan perintah berikut untuk cek permission:bashls -ld /Applications/ServBay/db/postgresql/13 # Cek permission data directory ls -l /Applications/ServBay/db/postgresql/13/postgresql.conf # Cek file konfigurasi ls -l /Applications/ServBay/db/postgresql/13/pg_hba.conf # Cek file otentikasi
1
2
3Jika permission tidak benar, perbaiki dengan
chmod
atauchown
, tapi ini jarang diperlukan karena ServBay biasa sudah mengatur permission saat instalasi. Kalau tetap muncul masalah, bisa jadi instalasi korup/bermasalah atau file tidak sengaja berubah.Cek kerusakan data directory: Data directory PostgreSQL menyimpan seluruh file database. Jika rusak (misalnya karena mati listrik, crash, error disk), PostgreSQL bisa gagal start. Biasanya tanda-tanda kerusakan dicatat di log. Proses perbaikan cukup rumit dan berpotensi kehilangan data – jika harus menggunakan tools seperti
pg_resetwal
, PASTIKAN backup dulu seluruh data directory.Coba restart PostgreSQL dengan command ServBay: Setelah semua pemeriksaan di atas, coba restart PostgreSQL memakai CLI ServBay dengan menentukan versi:
bashservbayctl restart postgresql 13
1Bisa juga lewat GUI ServBay.
2. Tidak Dapat Terhubung ke PostgreSQL
Meskipun status PostgreSQL di ServBay “running”, Anda kadang gagal melakukan koneksi via klien (psql
, pgAdmin
, atau aplikasi).
Kemungkinan Penyebab
- Sebenarnya PostgreSQL belum benar-benar berjalan normal.
- Pengaturan
pg_hba.conf
tidak mengizinkan koneksi Anda. - Firewall memblokir koneksi.
- Parameter koneksi (host, port, database, user, password) salah.
- User tidak punya hak ke database yang dituju.
Solusi
Cek status software dari GUI/servbayctl: Pastikan status PostgreSQL dari GUI ServBay adalah “running”. Jika tidak, lihat bagian “Paket PostgreSQL Tidak Bisa Dimulai”. Atau cek command line:
bashservbayctl status postgresql 13
1Pastikan output menandakan software berjalan.
Periksa konfigurasi otentikasi pada
pg_hba.conf
:pg_hba.conf
mengatur host, user, dan database mana saja yang boleh masuk beserta metode autentikasinya. Untuk dev lokal, biasanya perlu memastikan koneksi darilocalhost
atau127.0.0.1
diperbolehkan.Temukan
pg_hba.conf
(misal:/Applications/ServBay/db/postgresql/13/pg_hba.conf
), pastikan aturan mengizinkan user/database/sumber IP yang Anda gunakan (umumnya,127.0.0.1
atau::1
untuk IPv6 localhost), dan metode autentikasi sepertimd5
atautrust
.Contoh aturan yang mengizinkan user demo ServBay dari localhost (dengan
md5
):ini# TYPE DATABASE USER ADDRESS METHOD host all servbay-demo 127.0.0.1/32 md5 host all servbay-demo ::1/128 md5
1
2
3Setelah ubah aturan, reload konfigurasi PostgreSQL (tidak perlu restart penuh):
bashservbayctl reload postgresql 13
1Atau reload dari GUI.
Periksa firewall: Firewall bawaan macOS atau software lain mungkin memblokir port 5432 PostgreSQL. Pastikan firewall mengizinkan file executable ServBay
postgres
menerima koneksi.Bisa gunakan command berikut untuk whitelist di firewall macOS:
bash# Tambahkan aplikasi ke daftar perizinan sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /Applications/ServBay/bin/postgres # Pastikan tidak diblokir sudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblockapp /Applications/ServBay/bin/postgres
1
2
3
4Masukkan password admin jika diminta.
Verifikasi parameter koneksi dan hak user: Pastikan parameter host (
localhost
/127.0.0.1
), port (5432), nama database, user, dan password benar. Coba test pakaipsql
:bashpsql -U your_username -d your_database -h localhost -p 5432
1Ganti
your_username
danyour_database
sesuai milik Anda. Jika terkoneksi, akan muncul promptpsql
. Gagal login, error yang tampil biasanya mengarah ke error spesifik (password salah, database tidak ada, tidak punya hak akses, dll).Untuk cek hak akses di dalam database (setelah berhasil konek), gunakan:
sql-- Dalam psql \du
1
2Jika tidak punya hak akses cukup, login sebagai user administratif (biasanya
postgres
) dan tambahkan hak dengan perintahGRANT
.
3. Masalah Performa
PostgreSQL berjalan dan dapat terkoneksi, namun query lambat atau responnya berat.
Kemungkinan Penyebab
- Query SQL tidak dioptimasi dengan baik.
- Skema database dirancang tidak efisien.
- Parameter konfigurasi memori/cache/I/O tidak pas.
- Indeks belum dibuat pada kolom penting.
- Sumber daya hardware terbatas (CPU, RAM, disk).
- Statistik database kadaluarsa.
Solusi
Analisis dan optimasi query: Pakai
EXPLAIN
atauEXPLAIN ANALYZE
pada query lambat untuk melihat execution plannya. Anda bisa tahu apakah query menggunakan indeks, urutan join, mode scan, dll.sql-- Jalankan di psql atau SQL client EXPLAIN ANALYZE SELECT * FROM your_table_name WHERE column_name = 'value';
1
2Berdasarkan output, pertimbangkan rewrite query, buat index baru, atau koreksi skema.
Atur parameter konfigurasi PostgreSQL: Banyak setting di
postgresql.conf
memengaruhi performa, terutama terkait memori dan I/O. Dua setting utama:shared_buffers
: menentukan RAM yang dialokasikan PostgreSQL untuk cache data. Nilai yang wajar biasanya max 25% total RAM sistem.work_mem
: alokasi memori per operasi sorting/hash. Nilai lebih besar akan mengurangi penggunaan disk saat query kompleks.
Atur berdasarkan workload dan hardware Anda. Setelah edit file
postgresql.conf
, reload/restart PostgreSQL supaya perubahan berlaku.ini# Contoh, sesuaikan dengan RAM sistem Anda shared_buffers = 1GB # Jika sistem punya 4GB RAM work_mem = 64MB # Adjust sesuai kebutuhan query
1
2
3Buat indeks yang tepat: Index kolom yang sering dipakai di WHERE, JOIN, atau ORDER BY sangat membantu performa query.
sql-- Contoh membuat index pada kolom tertentu CREATE INDEX idx_column_name ON your_table_name(column_name);
1
2Ingat, terlalu banyak index akan memperlambat insert/update dan konsumsi disk. Buat hanya index yang dibutuhkan.
Update statistik database: Optimizer PostgreSQL sangat tergantung pada statistik tabel/indeks. Jika terjadi banyak perubahan data, jalankan
ANALYZE
secara teratur:sql-- Untuk seluruh database ANALYZE; -- Untuk tabel spesifik ANALYZE your_table_name;
1
2
3
4Biasanya autovacuum akan melakukan tugas ini otomatis, namun untuk diagnosis manual tetap disarankan menjalankan
ANALYZE
.Periksa resource hardware: Walaupun ServBay untuk dev lokal, database besar atau query berat bisa terdampak hardware Mac Anda (CPU, RAM, disk — khususnya HDD bukan SSD). Gunakan Activity Monitor untuk cek beban sistem Anda.
4. Crash Database
Paket PostgreSQL kadang tiba-tiba mati atau tidak merespon.
Kemungkinan Penyebab
- Masalah hardware (RAM, disk error).
- Masalah di level sistem operasi atau resource limit.
- Bug pada PostgreSQL (jarang, kecuali versi tertentu/skenario unik).
- Direktori data rusak.
- Pengaturan konfigurasi menyebabkan resource exhaustion (contoh: jumlah koneksi terlalu banyak).
Solusi
Periksa error log PostgreSQL: Setiap crash, PostgreSQL menulis error ke logfile seperti
/Applications/ServBay/logs/postgresql/<version>/postgresql-<version>.log
. Cari pesan dengan levelFATAL
atauERROR
dekat waktu crash. Biasanya log akan langsung menunjukkan pemicu utama, misal error memory, assert failed, atau korupsi data.Cek log sistem: Selain log PostgreSQL, log sistem macOS (bisa dibuka via aplikasi Console) mungkin memuat info tentang error hardware atau masalah OS yang berhubungan dengan crash-nya PostgreSQL.
Diagnosa kondisi hardware: Jalankan diagnosa hardware via tool bawaan macOS atau aplikasi pihak ketiga untuk cek RAM dan storage. Error disk adalah penyebab utama database korup/crash.
Perbaiki atau rebuild data directory (hati-hati!): Jika log menandakan data directory korup, bisa coba tool low-level seperti
pg_resetwal
(reset write-ahead log). Tapi sangat riskan dan bisa bikin data hilang. Tool ini sebaiknya dijalankan hanya jika izin kehilangan data minor sudah dipertimbangkan.Lebih disarankan: a. Backup data directory saat ini: Meski rusak, copy dulu secara lengkap. b. Inisialisasi data directory baru: Matikan PostgreSQL, pindahkan data lama, lalu inisialisasi dengan
initdb
(atau hapus & reinstall paket PostgreSQL lewat ServBay). c. Restore dari backup terakhir: Gunakanpg_restore
ataupsql
dengan backup file yang terpercaya.Restore data dari backup: Jika data directory sudah tak bisa diperbaiki atau perlu rollback ke state sebelum crash, cara paling aman adalah pulihkan dari backup buatan ServBay secara otomatis atau manual, biasanya terletak pada
/Applications/ServBay/backup/postgresql/<version>/
.
5. Masalah Backup & Restore
ServBay menyediakan backup otomatis/manual untuk PostgreSQL. Jika ada problem saat membuat backup atau restore, coba solusi berikut.
Kemungkinan Penyebab
- File backup rusak atau tidak lengkap.
- Ada kesalahan dalam perintah/parameter restore.
- Database target belum ada atau user kurang hak akses.
- Harddisk penuh.
- Proses backup/restore terputus.
Solusi
Cek integritas file backup: Pastikan file backup (
.dump
daripg_dump
atau backup ServBay) ukuran dan formatnya utuh, tidak rusak selama proses copy/simpan. Untuk file backup format text, cek bagian awal-akhir file. Untuk format custom/directory, error biasanya baru ketahuan saat menjalankanpg_restore
. File backup ServBay biasanya ada di:bash/Applications/ServBay/backup/postgresql/13/your_backup_file.dump
1Gunakan
ls -lh
untuk cek ukuran file.Restore dengan command yang sesuai: Metode restore tergantung jenis file backup.
- Backup text biasa (
pg_dump -Fp
atau default tanpa flag): Restore pakaipsql
.bashDatabasepsql -U your_username -d your_database -h localhost -p 5432 -f /path/to/your_backup_file.sql
1your_database
wajib sudah ada sebelumnya. - Backup format custom (
-Fc
) atau directory (-Fd
): Restore pakaipg_restore
.bashSama seperti sebelumnya, pastikan databasepg_restore -U your_username -d your_database -h localhost -p 5432 /path/to/your_backup_file.dump
1your_database
sudah ada.pg_restore
juga bisa untuk restore selektif.
Pastikan user yang digunakan (
your_username
) punya hak cukup (minimal owner database atau superuser, misal user defaultpostgres
) untuk proses restore.- Backup text biasa (
Pastikan database target tersedia: Untuk restore pakai
psql -f
ataupunpg_restore
, database yang dituju harus sudah dibuat sebelumnya. Jika belum ada, buat dulu:bashcreatedb -U your_username -h localhost -p 5432 your_database
1Atau gunakan GUI ServBay/alat administrasi lainnya.
Cek kapasitas harddisk: Restore backup besar butuh cukup ruang kosong di disk. Pastikan storage Mac Anda cukup.
Pantau konfigurasi backup dan log di ServBay: Jika memakai fitur backup otomatis ServBay dan bermasalah, cek setting backup, log ServBay, dan file log backup untuk mengetahui penyebab pastinya. ServBay memungkinkan pengaturan jadwal, target, dan retention backup.
FAQ (Pertanyaan yang Sering Diajukan)
Tanya: Di mana lokasi data directory PostgreSQL milik ServBay? Jawab: Data directory PostgreSQL biasanya terletak di
/Applications/ServBay/db/postgresql/<version>/data
, dengan<version>
adalah nomor versi PostgreSQL yang terinstal (misal,13
). File konfigurasipostgresql.conf
danpg_hba.conf
biasanya ada di/Applications/ServBay/db/postgresql/<version>/
.Tanya: Bagaimana reset password user
postgres
pada PostgreSQL ServBay? Jawab: Jika lupa password user superuser defaultpostgres
, atau ingin reset user lain, bisa lewat langkah berikut (dengan asumsi Anda setidaknya bisa login dengan mode trust atau punya superuser lain):- Matikan PostgreSQL lewat ServBay.
- Edit file
pg_hba.conf
(misal/Applications/ServBay/db/postgresql/13/pg_hba.conf
), ubah metode otentikasi lokal menjaditrust
(hanya sementara). Cari baris seperti:iniGanti menjadi:# TYPE DATABASE USER ADDRESS METHOD local all all peer # atau md5 host all all 127.0.0.1/32 md5 # atau scram-sha-256, dll.
1
2
3ini# TYPE DATABASE USER ADDRESS METHOD local all all trust host all all 127.0.0.1/32 trust host all all ::1/128 trust
1
2
3
4 - Jalankan kembali PostgreSQL lewat ServBay.
- Koneksikan
psql
sebagaipostgres
tanpa password:bashpsql -U postgres -h localhost -p 5432
1 - Di prompt
psql
, jalankan untuk mengubah password:sqlGantiALTER USER postgres PASSWORD 'new_secure_password';
1'new_secure_password'
sesuai keinginan. Untuk user lain, gantipostgres
dengan username tujuan. - Ketik
\q
untuk keluar daripsql
. - Penting: Matikan PostgreSQL, ubah kembali autentikasi di
pg_hba.conf
daritrust
ke mode yang aman (misal,md5
/scram-sha-256
), kemudian start ulang/load ulang PostgreSQL dari ServBay.
Tanya: Apakah ServBay support high availability (HA) atau replika PostgreSQL? Jawab: ServBay didesain untuk dev lokal dengan management software gampang dan terintegrasi. Belum menyediakan GUI khusus untuk solusi HA/replica PostgreSQL kelas production. Anda boleh melakukan konfigurasi manual fitur replika bawaan PostgreSQL (misal streaming replication), namun butuh pemahaman level advanced terhadap PostgreSQL dan command line.
Tanya: Bagaimana melakukan upgrade versi PostgreSQL melalui ServBay? Jawab: ServBay mengizinkan instalasi & manajemen beberapa versi PostgreSQL secara paralel. Untuk upgrade, biasanya Anda instal versi baru, lalu migrate data directory lama ke direktori versi baru pakai tool
pg_upgrade
resmi PostgreSQL. Langkah ini butuh mematikan kedua versi database, menjalankanpg_upgrade
lalu menyalakan ulang basis data pada versi baru. Lihat dokumentasi resmi PostgreSQL untuk detail penggunaanpg_upgrade
. Di ServBay setiap versi database punya data directory sendiri, sehingga proses migrasi menjadi lebih mudah.