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!