Server PostgreSQL bukan kotak hitam; seluruh perilakunya — berapa memori yang dipakai, koneksi berapa banyak yang ditampung, di mana data disimpan — dikendalikan oleh pengaturan (parameter) yang nilainya bisa kita baca dan ubah. Sebagai administrator maupun pengembang, kita akan sering perlu menjawab pertanyaan seperti “berapa work_mem di server ini?” atau “berapa koneksi maksimum yang ditampung?”. Chapter ini membahas di mana konfigurasi disimpan, cara membacanya dari dalam SQL, dan cara mengubahnya dengan aman lewat ALTER SYSTEM.
Tiga File Penting dalam Instalasi #
Konfigurasi sebuah cluster PostgreSQL tersebar di beberapa file yang letaknya bisa ditanyakan langsung kepada server. Tiga yang paling sering kita sentuh:
| File | Isi | Kapan diubah |
|---|---|---|
postgresql.conf | Parameter utama server: memori, koneksi, log, dan sebagainya | Saat setup awal atau tuning |
pg_hba.conf | Aturan autentikasi koneksi: siapa boleh masuk dengan metode apa | Saat mengatur akses user |
postgresql.auto.conf | Parameter yang diubah lewat ALTER SYSTEM | Dikelola server sendiri; jangan diedit tangan |
File ketiga sengaja dipisah dari file utama supaya perubahan yang dilakukan lewat perintah SQL tidak tertimpa ketika administrator mengedit postgresql.conf secara manual. Saat server menyala, PostgreSQL membaca keduanya dan menggabungkan isinya.
Lokasi ketiga file itu berbeda-beda tergantung cara instalasi: /etc/postgresql/17/main/ di Ubuntu, /opt/homebrew/var/postgresql@17/ di macOS dengan Homebrew, dan data directory yang kita pilih sendiri di Windows. Karena letaknya berbeda-beda itu, cara paling andal menemukannya adalah bertanya kepada server yang sedang berjalan.
Membaca Konfigurasi dengan SHOW #
Perintah SHOW adalah cara tercepat membaca satu parameter dari dalam SQL. Nama parameter yang dibaca mengikuti penamaan di postgresql.conf, jadi SHOW work_mem; membaca baris work_mem di file konfigurasi. File berikut memakai SHOW untuk menemukan lokasi ketiga file tadi, membaca satu parameter, lalu membaca beberapa parameter sekaligus dari catalog pg_settings:
-- Lokasi file konfigurasi utama server
SHOW config_file;
-- Lokasi file aturan autentikasi koneksi
SHOW hba_file;
-- Lokasi data directory tempat seluruh data tersimpan
SHOW data_directory;
-- Nilai satu parameter secara langsung
SHOW work_mem;
-- Membaca beberapa parameter sekaligus dari catalog server
SELECT name, setting, unit, context
FROM pg_settings
WHERE name IN ('max_connections', 'port', 'shared_buffers', 'work_mem')
ORDER BY name;Output yang Dihasilkan:
config_file
-------------------------------------------
/home/z/my-project/pgdata/postgresql.conf
(1 row)
hba_file
---------------------------------------
/home/z/my-project/pgdata/pg_hba.conf
(1 row)
data_directory
---------------------------
/home/z/my-project/pgdata
(1 row)
work_mem
----------
4MB
(1 row)
name | setting | unit | context
-----------------+---------+------+------------
max_connections | 100 | | postmaster
port | 54329 | | postmaster
shared_buffers | 16384 | 8kB | postmaster
work_mem | 4096 | kB | user
(4 rows)Empat hasil pertama memperlihatkan pola SHOW: satu parameter, satu nilai. Perlu dicatat bahwa path pada tiga hasil pertama adalah lokasi di lingkungan tempat materi ini diuji — di komputer Anda, lokasi itu mengikuti cara instalasi seperti dibahas di atas.
Hasil terakhir memakai table pg_settings, yaitu catalog yang menyimpan seluruh parameter beserta statusnya. Mari kita bedah kolom-kolomnya:
namedansetting: nama parameter dan nilainya saat ini. Nilai ditampilkan dalam bentuk mentah —work_memtampil sebagai4096, bukan4MB.unit: satuannya. Nilai4096dengan unitkBberarti 4 MB;shared_buffersbernilai16384dengan unit8kBberarti 128 MB. Parameter tanpa unit sepertimax_connectionsdanportmemang berupa bilangan polos.context: bagaimana parameter itu boleh diubah — pembahasan ini ada di subbab berikutnya.
Membaca lewat pg_settings sangat berguna ketika kita ingin membandingkan banyak parameter sekaligus atau memfilternya dengan WHERE, hal yang tidak bisa dilakukan SHOW.
Konteks Parameter: Restart atau Reload #
Kolom context pada pg_settings menentukan kapan perubahan sebuah parameter mulai berlaku. Ini yang sering menjebak pemula: mengubah nilai di file konfigurasi tidak serta-merta mengubah perilaku server yang sedang berjalan.
| Context | Arti | Perubahan berlaku setelah |
|---|---|---|
postmaster | Struktur yang dibangun saat server dinyalakan | restart server |
sighup | Dibaca ulang tanpa memutus koneksi | reload konfigurasi |
user | Boleh diubah per session oleh user mana pun | SET langsung di session |
Parameter shared_buffers dan max_connections ber-context postmaster karena memori dan slot koneksi dialokasikan saat server menyala; mengubahnya menuntut restart. Sementara work_mem ber-context user, sehingga setiap session bahkan bisa menaikkannya sendiri untuk query berat tanpa menyentuh file konfigurasi.
Mengubah Konfigurasi dengan ALTER SYSTEM #
Sejak PostgreSQL 9.4 ada cara mengubah parameter tanpa membuka editor teks: ALTER SYSTEM. Perintah ini menulis nilai baru ke postgresql.auto.conf, dan setelah konfigurasi dibaca ulang, nilai baru berlaku di seluruh session. File berikut mendemonstrasikan siklus lengkapnya — mengubah work_mem, memuat ulang, memeriksa hasilnya, lalu mengembalikan nilai bawaan supaya file ini aman dijalankan berulang kali. Karena pg_reload_conf() bersifat asinkron (mengirim sinyal, bukan menunggu selesai), pengembalian nilai di akhir file memakai SET work_mem = DEFAULT yang sinkron di level session:
-- Simpan pengaturan baru lewat ALTER SYSTEM
ALTER SYSTEM SET work_mem = '16MB';
-- Minta semua session membaca ulang konfigurasi.
-- pg_sleep(0.2) memberi waktu bagi server memproses sinyal sebelum
-- nilai dibaca kembali (reload bersifat asinkron).
SELECT pg_reload_conf(), pg_sleep(0.2);
-- Nilai baru kini berlaku di session ini
SHOW work_mem;
-- Kembalikan work_mem ke nilai bawaan
ALTER SYSTEM RESET work_mem;
-- Baca ulang konfigurasi sekali lagi (dengan jeda yang sama)
SELECT pg_reload_conf(), pg_sleep(0.2);
-- Nilai bawaan kembali berlaku untuk session-session baru;
-- session lama bisa sempat masih melihat 16MB karena pemuaian
-- ulang berjalan asinkron (SIGHUP), bukan sinkron.
SET work_mem = DEFAULT;
-- Nilai kembali seperti semula untuk session ini
SHOW work_mem;Output yang Dihasilkan:
ALTER SYSTEM
pg_reload_conf | pg_sleep
----------------+----------
t |
(1 row)
work_mem
----------
16MB
(1 row)
ALTER SYSTEM
pg_reload_conf | pg_sleep
----------------+----------
t |
(1 row)
SET
work_mem
----------
4MB
(1 row)Mari kita bedah alur perintah di file tersebut:
ALTER SYSTEM SET work_mem = '16MB': menulis entriwork_mem = '16MB'kepostgresql.auto.conf. Sampai di sini, session yang sedang berjalan belum melihat perubahan apa pun.SELECT pg_reload_conf();: function ini meminta server membaca ulang seluruh file konfigurasi — setara dengan menjalankanpg_ctl reloaddari terminal — dan mengembalikant(benar) bila perintahnya diterima.SHOW work_mem;pertama: setelah reload, nilai baru16MBsudah berlaku, termasuk di session yang sedang berjalan, karenawork_member-contextuser.ALTER SYSTEM RESET work_mem;: menghapus entriwork_memdaripostgresql.auto.confsehingga nilai kembali mengikutipostgresql.conf, yaitu bawaan4MB. Dua perintah terakhir memuat ulang dan membuktikan nilainya memang kembali.
pg_ctl: Mengelola Proses Server #
Dari sisi terminal, proses server diurus oleh pg_ctl. Perintahnya selalu menyertakan lokasi data directory lewat flag -D:
pg_ctl -D /path/ke/data-directory status
pg_ctl -D /path/ke/data-directory reload
pg_ctl -D /path/ke/data-directory restartSubperintah reload mengirim sinyal agar konfigurasi dibaca ulang tanpa memutus koneksi yang sedang ada — persis kerja pg_reload_conf() di subbab sebelumnya. Subperintah restart mematikan lalu menyalakan kembali server; ini diperlukan setelah mengubah parameter ber-context postmaster. Di Ubuntu dan macOS tugas serupa sudah terbungkus systemctl dan brew services seperti tabel di chapter instalasi, jadi pg_ctl paling sering kita jumpai pada server tanpa manajer layanan.
Dengan konfigurasi yang kini bisa kita baca dan ubah, satu alat masih belum kita sentuh secara serius: psql. Sejauh ini kita hanya memakainya sebagai pengantar perintah; chapter Menggunakan psql akan membedah meta-command dan kebiasaan kerja yang membuat terminal ini jauh lebih produktif.
Referensi #
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
lihat-konfigurasi.sql
Unduh berkas-- Lokasi file konfigurasi utama server
SHOW config_file;
-- Lokasi file aturan autentikasi koneksi
SHOW hba_file;
-- Lokasi data directory tempat seluruh data tersimpan
SHOW data_directory;
-- Nilai satu parameter secara langsung
SHOW work_mem;
-- Membaca beberapa parameter sekaligus dari catalog server
SELECT name, setting, unit, context
FROM pg_settings
WHERE name IN ('max_connections', 'port', 'shared_buffers', 'work_mem')
ORDER BY name;
ubah-work-mem.sql
Unduh berkas-- Simpan pengaturan baru lewat ALTER SYSTEM
ALTER SYSTEM SET work_mem = '16MB';
-- Minta semua session membaca ulang konfigurasi.
-- pg_sleep(0.2) memberi waktu bagi server memproses sinyal sebelum
-- nilai dibaca kembali (reload bersifat asinkron).
SELECT pg_reload_conf(), pg_sleep(0.2);
-- Nilai baru kini berlaku di session ini
SHOW work_mem;
-- Kembalikan work_mem ke nilai bawaan
ALTER SYSTEM RESET work_mem;
-- Baca ulang konfigurasi sekali lagi (dengan jeda yang sama)
SELECT pg_reload_conf(), pg_sleep(0.2);
-- Nilai bawaan kembali berlaku untuk session-session baru;
-- session lama bisa sempat masih melihat 16MB karena pemuaian
-- ulang berjalan asinkron (SIGHUP), bukan sinkron.
SET work_mem = DEFAULT;
-- Nilai kembali seperti semula untuk session ini
SHOW work_mem;