Tipe Data Unik PostgreSQL
PostgreSQL memiliki tipe data yang lebih kaya dibandingkan database lain. Fitur-fitur ini membuatnya sangat powerful.
JSONB
Menyimpan JSON dalam format binary yang efisien dan bisa di-index.
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name VARCHAR(200),
metadata JSONB
);
INSERT INTO products (name, metadata) VALUES
('Laptop', '{"brand": "Asus", "ram": 16, "storage": "512GB SSD"}');
-- Query ke dalam JSON
SELECT name, metadata->>'brand' AS brand
FROM products
WHERE metadata->>'ram' = '16';
-- Index pada JSONB
CREATE INDEX idx_products_metadata ON products USING GIN(metadata);
Array
CREATE TABLE posts (
id SERIAL PRIMARY KEY,
title VARCHAR(200),
tags TEXT[] -- array of text
);
INSERT INTO posts (title, tags) VALUES
('Tutorial SQL', ARRAY['sql', 'database', 'tutorial']);
-- Query array
SELECT * FROM posts WHERE 'sql' = ANY(tags);
SELECT * FROM posts WHERE tags @> ARRAY['sql', 'database'];
UUID
CREATE TABLE orders (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
total DECIMAL(10,2)
);
-- Tidak bisa ditebak, cocok untuk public-facing ID
ENUM
CREATE TYPE order_status AS ENUM ('pending', 'paid', 'shipped', 'delivered');
CREATE TABLE orders (
id SERIAL PRIMARY KEY,
status order_status DEFAULT 'pending'
);
Range Types
-- Untuk booking, scheduling
CREATE TABLE reservations (
id SERIAL PRIMARY KEY,
room_id INT,
during TSTZRANGE,
EXCLUDE USING GIST (room_id WITH =, during WITH &&)
-- Otomatis mencegah booking yang overlap!
);
Kapan Menggunakan Fitur Khusus PostgreSQL?
- JSONB — data semi-structured, settings, metadata
- Array — tags, roles, simple lists
- UUID — public IDs, distributed systems
- ENUM — status, tipe yang terbatas dan jarang berubah
- Range — scheduling, booking, temporal data