Suponiendo que esté hablando de JSON real y estricto (sin peculiaridades como claves sin comillas)...
json
no es muy diferente de text
. No hace mucho aparte de validar JSON .
jsonb
es una bestia diferente en comparación con estos dos:es una estructura de datos completa con su propio formato interno que tiene muchas más operaciones disponibles en las búsquedas. Por ejemplo json
no tiene =
aplicable (operador de igualdad). jsonb
posee. (text
tiene también, aunque es semánticamente diferente.)
Es mucho más sensato indexar, pero debe transformarse de un lado a otro durante las lecturas y escrituras.
Dado eso, jsonb
no parece una buena elección aquí.
... Así que solo queda una decisión por tomar:
¿Desea asegurarse de que su base de datos contenga solo valores JSON válidos en su columna? ¿En el nivel de la base de datos? ¿O confía en que todos los clientes de esa base de datos (aplicaciones de servidor, por lo general) solo proporcionen datos válidos?
json
es una opción relativamente segura de cualquier manera. Usando text
teóricamente podría mejorar el rendimiento por un margen insignificante debido a la ausencia de validación, pero solo obtendrá números específicos mediante la evaluación comparativa. Pero no tendría esa protección contra valores que no son JSON, y un error accidental en el cliente podría pasar desapercibido. ¡Prueba responsablemente!