Dengan asumsi Anda berbicara tentang JSON yang sebenarnya dan ketat (tanpa kebiasaan seperti kunci yang tidak dikutip)...
json
tidak terlalu berbeda dengan text
. Itu tidak banyak membantu selain memvalidasi JSON .
jsonb
adalah binatang yang berbeda dibandingkan dengan keduanya:ini adalah struktur data lengkap dengan format internalnya sendiri yang memiliki lebih banyak operasi yang tersedia dalam pencarian. Misalnya json
tidak memiliki =
. yang berlaku (operator kesetaraan). jsonb
memiliki. (text
juga, meskipun secara semantik berbeda.)
Ini jauh lebih masuk akal untuk diindeks, tetapi harus diubah bolak-balik selama membaca dan menulis.
Mengingat itu, jsonb
sepertinya bukan pilihan yang bagus di sini.
... Jadi hanya ada satu keputusan yang tersisa untuk dibuat:
Apakah Anda ingin memastikan bahwa database Anda hanya berisi nilai JSON yang valid di kolom Anda? Di tingkat basis data? Atau apakah Anda memercayai setiap klien database itu (biasanya aplikasi server) untuk hanya menyediakan data yang valid?
json
adalah pilihan yang relatif aman. Menggunakan text
secara teoritis dapat meningkatkan kinerja dengan margin yang dapat diabaikan karena tidak adanya validasi, tetapi Anda hanya akan mendapatkan angka tertentu dengan melakukan pembandingan. Tetapi itu tidak akan memiliki perlindungan terhadap nilai non-JSON, dan bug yang tidak disengaja di klien dapat luput dari perhatian. Uji secara bertanggung jawab!