JSON Data Query and Manipulation
Queries and manipulates JSON/JSONB data using operators for extraction, filtering, and modification of nested JSON structures in PostgreSQL.
Code
SELECT
id,
metadata->>'name' AS name,
metadata->'address'->>'city' AS city,
metadata->'tags' AS tags_array,
metadata #>> '{address,zip}' AS zip_code,
jsonb_array_length(metadata->'tags') AS tag_count
FROM documents
WHERE metadata @> '{"status": "published"}'
AND metadata->'address'->>'city' = 'New York'
AND metadata->'tags' ? 'featured'
AND metadata->>'priority' IS NOT NULL
ORDER BY (metadata->>'priority')::int DESC;
-- Update JSON data
UPDATE documents
SET metadata = jsonb_set(
metadata,
'{last_updated}',
to_jsonb(CURRENT_TIMESTAMP)
) || jsonb_build_object(
'view_count',
COALESCE((metadata->>'view_count')::int, 0) + 1
)
WHERE id = 42;
-- Extract and expand JSON array
SELECT
d.id,
tag.value AS tag
FROM documents d,
jsonb_array_elements(d.metadata->'tags') AS tag
WHERE d.metadata->'tags' IS NOT NULL;Report a problem with this exampleOpens a pre-filled issue on GitHub.