PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Dates JSONb :dates réelles en interne ?

JSON n'a pas de type "date". Le type JSONB (ajouté dans Pg 9.4 ) mappe mais ne s'étend pas sur les types primitifs JSON. La valeur vue est ce qu'elle est, du texte.

Bien qu'un index puisse être ajouté sur les propriétés de chaîne, le format actuel de "prose anglaise" ne pourra pas participer aux requêtes de plage car ces valeurs ne sont pas bien ordonnées sur les dates.

Différentes façons de stocker des dates bien ordonnées, compte tenu des restrictions de type primitif.

(Les sondes d'indice d'égalité peuvent être utilisées même si les plages ne le peuvent pas .. à condition que les valeurs correspondent exactement, ce qui est toujours soumis à l'utilisation d'une représentation cohérente des données.)

Lors de l'application d'une requête de plage sur l'index (JSONB / GIN), convertissez les valeurs DATE en type de données JSON approprié (mappé sur entier, numérique, texte dans Pg) utilisé pour la propriété "date" ; pas l'inverse.

Lors de la récupération des valeurs, convertissez le format choisi en DATE - c'est "ok" puisque cela est fait après la requête de plage et 'obligatoire' car JSONB ne prend pas en charge nativement les dates ou les heures.