PostgreSQL 提供了强大的 JSON 和 JSONB 数据类型及相关操作,适用于存储和查询半结构化数据。本文将详细介绍其常用操作。
SELECT '{"a": {"b": 1}}'::jsonb -> 'a';
-- 返回:{"b": 1}
SELECT '{"a": {"b": 1}}'::jsonb -> 'a' ->> 'b';
-- 返回:"1" (文本)
SELECT '[1, 2, 3]'::jsonb -> 1;
-- 返回:2 (JSON 格式)
SELECT '[1, 2, 3]'::jsonb ->> 1;
-- 返回:"2" (文本)
SELECT '{"a": {"b": {"c": 3}}}'::jsonb #> '{a,b}';
-- 返回:{"c": 3}
SELECT '{"a": {"b": {"c": 3}}}'::jsonb #>> '{a,b,c}';
-- 返回:"3" (文本)
SELECT *
FROM example_table
WHERE jsonb_column ->> 'key' = 'value';
SELECT *
FROM example_table
WHERE jsonb_column @> '{"key": "value"}';
SELECT *
FROM example_table
WHERE jsonb_column ? 'key';
SELECT *
FROM example_table
WHERE jsonb_column ?| array['key1', 'key2'];
SELECT *
FROM example_table
WHERE jsonb_column ?& array['key1', 'key2'];
SELECT *
FROM example_table
WHERE jsonb_column @> '[1, 2]'; -- JSON 数组包含 [1, 2]
SELECT *
FROM example_table
WHERE jsonb_column ?| array['key1', 'key2'];
UPDATE example_table
SET jsonb_column = jsonb_column || '{"new_key": "new_value"}';
UPDATE example_table
SET jsonb_column = jsonb_column - 'key_to_remove';
UPDATE example_table
SET jsonb_column = jsonb_column - '{key1, key2}';
UPDATE example_table
SET jsonb_column = jsonb_set(jsonb_column, '{nested,key}', '"new_value"');
SELECT jsonb_column ->> 'key', COUNT(*)
FROM example_table
GROUP BY jsonb_column ->> 'key';
SELECT jsonb_agg(jsonb_column)
FROM example_table;
SELECT jsonb_array_elements(jsonb_column)
FROM example_table;
CREATE INDEX idx_jsonb_column ON example_table USING gin (jsonb_column);
SELECT *
FROM example_table
WHERE jsonb_column @> '{"key": "value"}';
CREATE INDEX idx_jsonb_key ON example_table USING gin ((jsonb_column -> 'key'));
PostgreSQL 的 JSONB 查询功能强大且灵活,适合各种复杂的数据处理场景。结合索引优化,性能可以进一步提升。