Tugas Krusial Seorang DBA
Setelah menguasai instalasi, DDL, DML, dan optimasi query, perhatian kita kini beralih ke aspek yang paling vital bagi kelangsungan bisnis: Administrasi Basis Data (DBA) dan Keamanan. Di lingkungan production, data adalah aset paling berharga, dan tugas seorang DBA adalah memastikan data tersebut selalu tersedia (available), konsisten (consistent), utuh (durable), dan aman (secure).
PostgreSQL, dengan arsitektur yang kokoh, menyediakan banyak tool bawaan untuk tugas-tugas ini. Artikel seri terakhir ini akan memandu Anda melalui tiga pilar keandalan:
Keamanan dan Akses: Mengelola siapa yang dapat melihat atau mengubah apa.
Backup dan Recovery: Memastikan data dapat dipulihkan dari bencana apa pun.
Ketersediaan Tinggi (HA): Meminimalkan downtime melalui replikasi.
Penguasaan praktik DBA ini adalah garis pertahanan terakhir untuk aplikasi Anda. Query secepat apa pun tidak ada gunanya jika seluruh database mengalami kegagalan dan tidak dapat dipulihkan.
👥 Manajemen Akses dan Peran (Role & Keamanan)
Di PostgreSQL, pengguna (user) dan grup dikelola melalui konsep yang disebut Role. Sebuah role dapat berupa user (dapat login) atau group (kumpulan izin).
1. Membuat dan Mengelola Role
Kita telah melihat pembuatan role dasar di Seri 1. Berikut adalah perintah dan atribut yang lebih mendalam:
-- Membuat role yang hanya bisa login (standard user)
CREATE ROLE app_user WITH LOGIN PASSWORD 'sangat_rahasia';
-- Membuat role yang merupakan 'group' tanpa izin login
CREATE ROLE readonly_group NOLOGIN;
-- Memberikan keanggotaan (app_user menjadi anggota readonly_group)
GRANT readonly_group TO app_user;
-- Menjatuhkan (menghapus) role
DROP ROLE obsolete_user;
2. Pengaturan Hak Akses (Privileges)
Hak akses diberikan kepada role pada objek tertentu (database, tabel, skema, fungsi). Perintah utamanya adalah GRANT dan REVOKE.
| Objek | Hak Akses (Privilege) | Deskripsi |
| Tabel | SELECT, INSERT, UPDATE, DELETE | Hak dasar untuk manipulasi data. |
| Database | CONNECT, CREATE | Hak untuk terhubung dan hak untuk membuat skema/tabel di dalamnya. |
| Schema | USAGE, CREATE | Hak untuk menggunakan skema dan hak untuk membuat objek di dalam skema. |
| Sequences | USAGE | Hak untuk mengambil nilai auto-increment (misalnya, pada kolom SERIAL). |
Contoh Pemberian Hak Akses:
-- Memberikan hak SELECT pada tabel employees kepada app_user
GRANT SELECT ON employees TO app_user;
-- Memberikan hak INSERT, UPDATE, DELETE kepada app_admin_role
GRANT INSERT, UPDATE, DELETE ON employees TO app_admin_role;
-- Memberikan semua hak di atas kepada app_user
GRANT ALL PRIVILEGES ON TABLE employees TO app_admin_role;
Keamanan Prinsip Least Privilege: Selalu berikan role hak akses minimal yang diperlukan untuk menjalankan tugasnya. Jangan pernah menggunakan superuser (
postgres) untuk aplikasi harian.
3. Keamanan Koneksi (pg_hba.conf)
File konfigurasi pg_hba.conf (host-based authentication) adalah firewall tingkat database yang menentukan siapa (host/IP) yang dapat terhubung ke database mana dengan user mana, dan menggunakan metode autentikasi apa.
| Kolom | Deskripsi | Nilai Khas di Production |
| TYPE | Tipe koneksi (host, local, hostssl). | hostssl (Memaksa koneksi terenkripsi SSL). |
| DATABASE | Target database (all atau nama spesifik). | Nama database aplikasi. |
| USER | Target user (all atau nama spesifik). | Role aplikasi (app_user). |
| ADDRESS | Alamat IP atau range (0.0.0.0/0 berarti semua). | IP Server Aplikasi (Tidak boleh 0.0.0.0/0 secara publik). |
| METHOD | Metode Autentikasi (md5, scram-sha-256, trust). | scram-sha-256 (Paling aman). |
📦 Backup dan Recovery: Strategi Pemulihan
Tidak ada sistem yang 100% kebal dari kegagalan. Strategi backup yang andal adalah wajib. PostgreSQL menawarkan beberapa metode backup utama.
1. Logical Backup (pg_dump)
pg_dump adalah utilitas bawaan yang membuat file yang berisi perintah SQL (DDL dan DML) yang diperlukan untuk merekonstruksi database.
| Fitur | Keterangan |
| Output | File .sql atau format custom (-Fc). |
| Konsistensi | Konsisten secara transaksional pada saat dump dimulai. |
| Kegunaan | Migrasi antar versi PostgreSQL, backup harian tabel kecil/menengah. |
Perintah Backup:
pg_dump -U app_user -d production_db -Fc > /path/to/backup/db_dump_$(date +%F).custom
Perintah Restore:
pg_restore -U app_user -d new_database /path/to/backup/db_dump_2025-11-03.custom
2. Physical Backup (Point-in-Time Recovery – PITR)
Untuk database berskala besar, atau yang membutuhkan pemulihan yang sangat cepat dan granular, digunakan PITR. PITR bekerja dengan menggabungkan:
Base Backup: Salinan lengkap file data (cluster).
WAL (Write-Ahead Log): File log transaksi yang mencatat setiap perubahan data.
Ini memungkinkan Anda memulihkan database ke titik waktu spesifik (misalnya, 5 menit sebelum kesalahan terjadi), bukan hanya pada saat backup terakhir. Tool seperti Barman atau pgBackRest sangat direkomendasikan untuk mengelola PITR di lingkungan production.
Matriks Perbandingan Strategi Backup
| Kriteria | pg_dump (Logical) | PITR (Physical + WAL) |
| Ukuran DB Ideal | Kecil hingga Menengah (< 100GB). | Besar hingga Sangat Besar (> 100GB). |
| Kecepatan Restore | Lambat (harus menjalankan semua perintah SQL). | Sangat Cepat (hanya menyalin file data). |
| Granularitas Waktu | Hanya dapat restore ke saat backup dibuat. | Dapat restore ke detik mana pun antara base backup. |
| Overhead Server | Rendah, namun bisa tinggi saat restore. | Tinggi (membutuhkan penyimpanan dan manajemen WAL yang berkelanjutan). |
Kesimpulan DBA: Selalu gunakan PITR sebagai strategi utama untuk database production yang penting.
🔄 Ketersediaan Tinggi (High Availability) dan Replikasi
HA memastikan bahwa layanan database Anda tetap berjalan meskipun server utama mengalami kegagalan. Cara utama mencapai HA di PostgreSQL adalah melalui Replikasi Streaming.
Replikasi Streaming (Master-Slave)
Replikasi Streaming adalah proses di mana satu server (Primary/Master) mengirimkan WAL secara real-time ke satu atau lebih server lain (Standby/Replica/Slave).
Primary Server: Menerima semua operasi write (INSERT, UPDATE, DELETE).
Standby Server: Menerima WAL dari Primary dan mereplikasi perubahan. Server ini hanya dapat menangani operasi read (Read-Only).
Keuntungan Replikasi:
Toleransi Kegagalan (Failover): Jika Primary gagal, salah satu Standby dapat dipromosikan menjadi Primary baru (proses Failover).
Load Balancing Baca: Mengarahkan query
SELECTke server Standby untuk mengurangi beban pada Primary.
Failover dan Switchover
| Terminologi | Keterangan | Implementasi |
| Failover | Proses otomatis atau manual mempromosikan Standby menjadi Primary setelah kegagalan yang tidak terduga. | Dilakukan dengan tool manajemen cluster seperti Patroni atau Repmgr. |
| Switchover | Proses transisi yang terencana di mana Primary dan Standby bertukar peran. | Digunakan untuk pemeliharaan terencana (maintenance). |
🩺 Monitoring dan Pemeliharaan Rutin
Seorang DBA yang baik tidak hanya memperbaiki masalah, tetapi juga mencegahnya.
1. VACUUM dan Autovacuum
Karena arsitektur MVCC, PostgreSQL menciptakan “baris mati” (dead tuples) saat data diubah atau dihapus. Baris-baris ini harus dibersihkan secara berkala agar ruang disk dapat digunakan kembali dan query tetap cepat.
VACUUM: Perintah manual untuk membersihkan dead tuples.
AUTOVACUUM (Wajib): Proses background otomatis yang menjalankan
VACUUMdanANALYZE(memperbarui statistik query optimizer) secara berkala. Pastikan Autovacuum dikonfigurasi dengan baik di filepostgresql.conf.
2. Memeriksa Statistik Kinerja
Gunakan view statistik sistem untuk memantau aktivitas:
pg_stat_activity: Untuk melihat semua koneksi yang sedang berjalan dan query yang dieksekusi saat ini (untuk mengidentifikasi query yang lambat).pg_stat_statements(Ekstensi): Mencatat dan mengagregasi statistik semua query yang telah dijalankan, memungkinkan identifikasi query mana yang paling membebani sistem.
💻 Kesimpulan: Ketersediaan Tinggi Dimulai dari Administrasi
Seri 4 telah menyimpulkan panduan PostgreSQL Anda dengan membahas aspek-aspek paling kritis di lingkungan production: keamanan, recovery, dan ketersediaan tinggi.
Penguasaan tugas DBA memastikan bahwa aset data Anda terlindungi dari kegagalan sistem, kesalahan manusia, dan akses tidak sah. Terapkan praktik least privilege, pastikan PITR dikonfigurasi, dan gunakan Replikasi Streaming untuk redundansi.
Berikut adalah command esensial Administrasi Basis Data yang wajib Anda kuasai:
-- DBA ESSENTIALS: KEAMANAN, BACKUP, DAN PERAWATAN
# ----------------------------------------------------
# 1. Manajemen Hak Akses
GRANT [SELECT/INSERT/etc.] ON [tabel] TO [role_aplikasi];
REVOKE ALL PRIVILEGES ON [tabel] FROM [role_yang_tidak_berhak];
# 2. Backup Logis Harian (Untuk data kecil/migrasi)
pg_dump -U [user] -d [nama_db] -Fc > /path/to/backup/db_dump.custom
# 3. Perintah Perawatan (Jika Autovacuum gagal)
VACUUM FULL ANALYZE [nama_tabel];
# 4. Monitoring Koneksi dan Query Aktif
SELECT pid, usename, client_addr, application_name, query
FROM pg_stat_activity
WHERE state = 'active';
# ----------------------------------------------------
# SERI SELESAI: Anda kini telah menguasai PostgreSQL dari dasar hingga DBA.

