pgsql 特有字段记录
- 建表语句
CREATE TABLE test_table (id SERIAL PRIMARY KEY,info_json JSON,info_jsonb JSONB,tags TEXT[]
);
- 插入语句
INSERT INTO test_table (info_json, info_jsonb, tags)
VALUES ('{"name": "Alice", "age": 25}','{"name": "Bob", "age": 30}',ARRAY['tag1', 'tag2', 'tag3']
);
- 查询语句
3.1 查询所有数据
SELECT * FROM test_table;
3.2 查询 JSON 字段中的某个 keySELECTinfo_json->>'name' AS json_name,info_jsonb->>'name' AS jsonb_name
FROM test_table;
3.3 查询数组字段的内容
SELECT tags FROM test_table;
3.4 查询数组中包含某个元素的行
SELECT * FROM test_table WHERE 'tag2' = ANY(tags);
3.5 查询 JSONB 字段中包含某个 key-value
SELECT * FROM test_table WHERE info_jsonb @> ‘{“name”: “Bob”}’;
4. 更新语句
4.1 更新 JSON 字段内容
UPDATE test_table
SET info_json = '{"name": "Alice", "age": 26}'
WHERE id = 1;
4.2 更新 JSONB 字段内容UPDATE test_table
SET info_jsonb = jsonb_set(info_jsonb, '{age}', '35')
WHERE id = 1;
这条语句会把 info_jsonb 字段中的 age 改为 35。
4.3 替换整个数组UPDATE test_table
SET tags = ARRAY['tagA', 'tagB']
WHERE id = 1;
4.4 向数组追加元素
UPDATE test_table
SET tags = tags || 'tagX'
WHERE id = 1;EXPLAIN SELECT * FROM test_table WHERE tags @> ARRAY['tag1'];
4.5 删除数组中的某个元素UPDATE test_table
SET tags = array_remove(tags, 'tag2')
WHERE id = 1;
- 删除测试数据(可选)
DELETE FROM test_table WHERE id = 1;