En supposant que vous parliez de JSON réel et strict (sans bizarreries telles que des clés sans guillemets)...
json
n'est pas trop différent de text
. Il ne fait pas grand-chose à part valider JSON .
jsonb
est une bête différente par rapport aux deux :c'est une structure de données à part entière avec son propre format interne qui a beaucoup plus d'opérations disponibles dans les recherches. Par exemple json
n'a pas de =
applicable (opérateur d'égalité). jsonb
a. (text
a aussi, même si c'est sémantiquement différent.)
Il est beaucoup plus judicieux d'indexer, mais il doit être transformé dans les deux sens lors des lectures et des écritures.
Étant donné que, jsonb
ne ressemble pas à un bon choix ici.
... Il ne reste donc qu'une seule décision à prendre :
Voulez-vous vous assurer que votre base de données ne contient que des valeurs JSON valides dans votre colonne ? Au niveau de la base de données ? Ou faites-vous confiance à chaque client de cette base de données (applications serveur, généralement) pour ne fournir que des données valides ?
json
est un choix relativement sûr de toute façon. Utilisation de text
pourrait théoriquement améliorer les performances d'une marge négligeable en raison de l'absence de validation, mais vous n'obtiendrez que des chiffres spécifiques par analyse comparative. Mais il n'aurait pas cette protection contre les valeurs non JSON, et un bogue accidentel dans le client pourrait passer inaperçu. Testez de manière responsable !