は、キーPostgresqlのJSONのカラムのチェックキーが存在している私は、JSONの列を確認するために、このようなクエリを書いている
SELECT *
FROM "details"
where ("data"->'country'->'state'->>'city') is not null;
を持っているが、私は、「データ」「街」
が含まれている場合は、行を選択しますクエリを記述する必要がありますデータのjson構造は一貫していません。
は、キーPostgresqlのJSONのカラムのチェックキーが存在している私は、JSONの列を確認するために、このようなクエリを書いている
SELECT *
FROM "details"
where ("data"->'country'->'state'->>'city') is not null;
を持っているが、私は、「データ」「街」
が含まれている場合は、行を選択しますクエリを記述する必要がありますデータのjson構造は一貫していません。
それはdocumentationに言われているようあなたは?
とdata
のトップレベルキーを確認することができます。
例えばJSON列からすべてのネストされたオブジェクト内のすべてのキーを確認する
はもちろんこれは非常に効率的ではありません再帰CTE
select * from details
where 'city' in (
WITH RECURSIVE t(k,j) as (
select jsonb_object_keys(details.data), details.data
UNION ALL
select jsonb_object_keys(t.j->t.k), t.j->t.k
FROM t WHERE jsonb_typeof(t.j->t.k) = 'object'
)
select k from t
);
が必要です。
あなたは、いくつかのJSON値が「街のテキストを含むことができ、テキストとLIKE
SELECT *
FROM "details"
WHERE "data"::text LIKE '%"city":%'
とキーを検索するために、あなたのJSONに変換することができます。あなたはどのようにこのキー名またはテキストだけを区別していますか? –