Tipe data JSONB di PostgreSQL memudahkan pengelolaan data JSON di dalam database Anda. Kemampuannya tidak sebatas penyimpanan sederhana, tetapi juga menawarkan fungsi-fungsi canggih untuk memanipulasi dan melakukan query data JSON secara mendetail. Panduan ini akan membahas fungsi-fungsi JSONB tersebut dengan contoh praktis agar Anda bisa memaksimalkan kekuatan PostgreSQL dalam mengelola data JSON.
Untuk gambaran yang lebih luas tentang cara bekerja dengan JSON di PostgreSQL, termasuk tipe json dan jsonb, lihat panduan lengkap kami tentang fungsi JSON PostgreSQL.
Pengenalan JSONB
Tipe data jsonb di PostgreSQL adalah format biner untuk menyimpan data JSON. Tipe ini sangat efisien dan menawarkan kemampuan indexing yang tidak dimiliki json. JSONB umumnya lebih disarankan karena fleksibilitas dan keunggulan performanya.
Membuat Tabel dengan JSONB
Mari mulai dengan membuat tabel yang menggunakan tipe data jsonb:
CREATE TABLE users (
id SERIAL PRIMARY KEY,
data JSONB
);
Menyisipkan Data JSONB
Sisipkan data JSONB menggunakan sintaks JSON standar. PostgreSQL otomatis memvalidasi dan mengonversi JSON ke format biner:
INSERT INTO users (data) VALUES
('{"name": "John Doe", "email": "john@example.com", "age": 30}'),
('{"name": "Jane Doe", "email": "jane@example.com", "age": 25}'),
('{"name": "Alice Smith", "email": "alice@example.com", "age": 28, "address": {"city": "New York", "state": "NY"}}');
Mengakses Nilai JSONB
PostgreSQL menyediakan berbagai operator untuk menggali nilai JSONB.
Mengekstrak Objek JSONB
Untuk mengakses nilai JSONB bersarang, gunakan operator -> dan ->>. Operator -> mengembalikan data dalam format JSON, sedangkan ->> mengembalikan teks.
SELECT data->'name' AS name, data->>'email' AS email FROM users;
Output yang Diharapkan:
name | email
---------+--------------------
"John Doe" | john@example.com
"Jane Doe" | jane@example.com
Mengekstrak Nilai JSONB Bersarang
Untuk struktur JSON yang lebih dalam, rangkai operatornya. Operator ? memeriksa keberadaan key terlebih dahulu:
SELECT
data->>'name' AS name,
data->'address'->>'city' AS city
FROM users
WHERE data ? 'address';
Output yang Diharapkan:
name | city
-------------|----------
Alice Smith | New York
Fungsi JSONB
PostgreSQL menyertakan serangkaian fungsi JSONB yang lebih dari sekadar ekstraksi nilai sederhana.
Memeriksa Keberadaan Key
Operator ? memeriksa apakah sebuah key ada:
SELECT data ? 'age' AS has_age FROM users;
Output yang Diharapkan:
has_age
---------
t
t
t
Memeriksa Containment
Gunakan operator @> untuk memverifikasi apakah sebuah objek JSON memuat objek lainnya:
SELECT * FROM users WHERE data @> '{"age": 30}';
Output yang Diharapkan:
id | data
----+---------------------------------------------
1 | {"name": "John Doe", "email": "john@example.com", "age": 30}
Penggabungan JSONB
Gabungkan kolom atau nilai JSONB menggunakan operator ||:
SELECT data || '{"verified": false}' AS updated_data FROM users;
Output yang Diharapkan:
updated_data
-------------------------------------------------------------------
{"age": 30, "name": "John Doe", "email": "john@example.com", "verified": false}
{"age": 25, "name": "Jane Doe", "email": "jane@example.com", "verified": false}
{"age": 28, "name": "Alice Smith", "email": "alice@example.com", "address": {"city": "New York", "state": "NY"}, "verified": false}
Menghapus Key dari JSONB
Hapus sebuah key menggunakan operator -:
SELECT data - 'age' AS partial_data FROM users;
Output yang Diharapkan:
partial_data
--------------------------------------------------------------------
{"name": "John Doe", "email": "john@example.com"}
{"name": "Jane Doe", "email": "jane@example.com"}
{"name": "Alice Smith", "email": "alice@example.com", "address": {"city": "New York", "state": "NY"}}
Indexing JSONB
Untuk meningkatkan performa query pada data JSONB, gunakan index.
Membuat Index JSONB
Index GIN sangat ideal untuk tipe JSONB:
CREATE INDEX idx_users_data ON users USING GIN (data);
Index ini membantu mempercepat operasi seperti mencari keberadaan key JSON atau pasangan key-value.
Fungsi JSONB Lanjutan
PostgreSQL menyediakan fungsi tambahan untuk operasi yang lebih kompleks:
-- Convert JSONB to key-value pairs
SELECT jsonb_each_text(data) FROM users LIMIT 1;
-- Get all keys from a JSONB object
SELECT jsonb_object_keys(data) FROM users LIMIT 1;
-- Update a nested value using jsonb_set
UPDATE users
SET data = jsonb_set(data, '{address,zip}', '"10001"')
WHERE data ? 'address';
Kesimpulan
Fungsi JSONB di PostgreSQL menawarkan opsi yang andal dan fleksibel untuk bekerja dengan data JSON di dalam database Anda. Keunggulan utamanya meliputi:
- Performa: Format penyimpanan biner dengan indexing yang efisien
-
Operator yang lengkap: Ekstraksi dan manipulasi mudah dengan
->,->>,@>,? -
Fungsi lanjutan: Operasi kompleks seperti
jsonb_set,jsonb_each_text, danjsonb_array_elements - Dukungan indexing: Index GIN untuk query yang cepat
Kemampuan ini menjadikan PostgreSQL pilihan tepat untuk aplikasi yang perlu menyimpan dan melakukan query data JSON semi-terstruktur bersama data relasional tradisional. Dengan menguasai fungsi-fungsi JSONB ini, Anda bisa membangun aplikasi database yang lebih fleksibel dan efisien.
Beekeeper Studio Adalah GUI Database Gratis & Open Source
Tool query & editor SQL terbaik yang pernah saya pakai. Semua yang saya butuhkan untuk mengelola database ada di sini. - ⭐⭐⭐⭐⭐ Mit
Beekeeper Studio cepat, intuitif, dan mudah digunakan. Beekeeper mendukung banyak sekali database, dan berjalan mulus di Windows, Mac, dan Linux.
Apa Kata Pengguna tentang Beekeeper Studio
"Beekeeper Studio sepenuhnya menggantikan workflow SQL lama saya. Cepat, intuitif, dan membuat pekerjaan database kembali menyenangkan."
"Saya sudah mencoba banyak GUI database, tetapi Beekeeper punya keseimbangan sempurna antara fitur dan kesederhanaan. Langsung berfungsi."