~/VibeHandbook
PDF Gratis

Database

postgresql.org

PostgreSQL

Apa itu ini

PostgreSQL adalah basis data relasional open-source yang sudah matang, yang menyimpan data dalam tabel bertipe dengan dukungan kuat untuk (Structured Query Language), transaksi, dan integritas data. PostgreSQL dikenal karena akurasinya, kemampuannya untuk diperluas, dan fitur-fitur kaya seperti JSONB (tipe biner milik Postgres), pencarian teks penuh (full-text search), dan window functions. Ini adalah pilihan default untuk sebagian besar aplikasi yang membutuhkan data terstruktur yang andal.

Kelebihan

  • Bayangkan transfer bank yang bisa selesai sepenuhnya atau dibatalkan sepenuhnya — tidak pernah setengah jalan. Jaminan semua-atau-tidak-sama-sekali itu disebut transaksi ACID (Atomicity, Consistency, Isolation, Durability), dan Postgres memberikan konsistensi kuat secara default.
  • SQL yang bertenaga: joins, CTE (Common Table Expressions), window functions, dan agregat.
  • Tipe data yang fleksibel termasuk JSONB, array, range, dan tipe custom.
  • Ekstensi seperti PostGIS (geospasial) dan pgvector (embedding).
  • Constraint yang kuat, foreign key, dan aturan check menjaga kualitas data.

Trade-off

  • Scaling vertikal itu mudah; sharding horizontal membutuhkan tooling tambahan.
  • Membutuhkan migrasi skema seiring berkembangnya model data kamu.
  • Lebih berat dioperasikan dibanding basis data satu-file untuk proyek kecil.
  • Model satu koneksi per klien membutuhkan pooler (PgBouncer) pada skala tinggi.

Kapan menggunakannya

Jadikan PostgreSQL sebagai pilihan default untuk hampir semua aplikasi dengan data relasional, transaksi, atau kebutuhan pelaporan: backend SaaS (Software as a Service), e-commerce, analitik, dan apa pun yang diuntungkan oleh constraint dan join.

Kecocokan dengan vibe coding

Saat mengarahkan AI, berikan entitas dan hubungan antar-entitasnya, lalu minta AI menghasilkan skema yang ternormalisasi lengkap dengan primary key, foreign key, constraint NOT NULL, dan indeks yang masuk akal. Bersikeraslah agar AI menggunakan query berparameter (bukan SQL yang digabung dari string) untuk mencegah injeksi, dan minta AI membungkus penulisan multi-langkah dalam sebuah transaksi. Satu tips bagus: minta AI juga membuat file migrasi yang bisa dibalik (reversible). Minta AI menjelaskan setiap indeks yang ditambahkannya juga. Dengan begitu kamu memahami trade-off antara kecepatan baca dan tulis sebelum menerapkannya.

CREATE TABLE users (
  id         BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  email      TEXT NOT NULL UNIQUE,
  created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);

CREATE TABLE orders (
  id       BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  user_id  BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
  total    NUMERIC(10,2) NOT NULL CHECK (total >= 0),
  status   TEXT NOT NULL DEFAULT 'pending'
);

CREATE INDEX idx_orders_user_id ON orders(user_id);

-- Parameterized query (placeholders, not concatenation)
SELECT o.id, o.total
FROM orders o
WHERE o.user_id = $1 AND o.status = $2;