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

Utilisation des fonctions Postgres JSON sur les colonnes de table

Les expressions après select doit correspondre à une seule valeur. Depuis jsonb_to_recordset renvoie un ensemble de lignes et de colonnes, vous ne pouvez pas l'utiliser ici.

La solution est un cross join lateral , qui vous permet de développer une ligne en plusieurs lignes à l'aide d'une fonction. Cela vous donne des lignes uniques qui select peut agir sur. Par exemple :

select  *
from    journal j
cross join lateral
        jsonb_to_recordset(j.data#>'{context, data, files}') as d(id int, name text)
where   j.id = 'ap32bbofopvo7pjgo07g'

Notez que le #>> opérateur renvoie le type text , et le #> l'opérateur renvoie le type jsonb . Comme jsonb_to_recordset attend jsonb comme premier paramètre, j'utilise #> .

Regardez-le fonctionner sur rextester.com