PostgreSQL menawarkan dua jenis untuk menyimpan data JSON: json
dan jsonb
. Untuk menerapkan mekanisme kueri yang efisien untuk tipe data ini, PostgreSQL juga menyediakan tipe data jsonpath yang dijelaskan dalam Bagian 8.14.6 .
Tipe json
dan jsonb
data menerima set nilai yang hampir identik sebagai input. Perbedaan praktis utama adalah efisiensi. The
json
tipe data toko salinan dari teks input, yang berfungsi pengolahan harus reparse pada setiap eksekusi; sementara jsonb
data disimpan dalam format biner terurai yang membuatnya sedikit lebih lambat untuk input karena penambahan overhead konversi, tetapi secara signifikan lebih cepat untuk diproses, karena tidak diperlukan reparsing. jsonb
juga mendukung pengindeksan, yang bisa menjadi keuntungan yang signifikan.
Karena json
tipe menyimpan salinan teks input yang tepat, itu akan mempertahankan ruang putih semantik-tidak signifikan antara token, serta urutan kunci dalam objek JSON. Juga, jika objek JSON dalam nilai berisi kunci yang sama lebih dari sekali, semua pasangan kunci / nilai disimpan. (Fungsi pemrosesan menganggap nilai terakhir sebagai yang operatif.) Sebaliknya, jsonb
tidak mempertahankan ruang putih, tidak mempertahankan urutan kunci objek, dan tidak menyimpan kunci objek duplikat. Jika kunci duplikat ditentukan dalam input, hanya nilai terakhir yang disimpan.
Secara umum, sebagian besar aplikasi harus memilih untuk menyimpan data JSON sebagai
jsonb
, kecuali ada kebutuhan yang cukup khusus, seperti asumsi warisan tentang pemesanan kunci objek.
PostgreSQL hanya mengizinkan satu set karakter pengkodean per basis data. Oleh karena itu tidak mungkin untuk tipe JSON untuk menyesuaikan secara kaku dengan spesifikasi JSON kecuali jika pengkodean database adalah UTF8. Upaya untuk secara langsung memasukkan karakter yang tidak dapat direpresentasikan dalam pengkodean basis data akan gagal; sebaliknya, karakter yang dapat direpresentasikan dalam pengkodean basis data tetapi tidak dalam UTF8 akan diizinkan.