PostgreSQL 教程:json 与 jsonb 类型的批量导入差异及操作案例

PostgreSQL JSON与JSONB批量导入对比

PostgreSQL 中 JSON 与 JSONB 类型的差异

JSON 和 JSONB 是 PostgreSQL 中两种存储 JSON 数据的类型,但它们在存储方式和性能上有显著区别:

  • JSON 类型以纯文本格式存储数据,保留原始格式(如空格、键顺序),插入时不做验证,查询时需要实时解析。
  • JSONB 类型以二进制格式存储,解析后重新格式化,删除无关空格和重复键,支持索引,查询效率更高。

批量导入 JSON 与 JSONB 数据的操作案例

方法一:使用 COPY 命令导入

创建测试表并准备数据文件(如 data.json):

CREATE TABLE test_json (id SERIAL, data JSON);
CREATE TABLE test_jsonb (id SERIAL, data JSONB);

执行 COPY 命令导入:

COPY test_json (data) FROM '/path/to/data.json';
COPY test_jsonb (data) FROM '/path/to/data.json';

方法二:使用 INSERT 语句批量导入

通过数组构造批量插入:

INSERT INTO test_json (data) VALUES 
('{"name": "Alice", "age": 30}'),
('{"name": "Bob", "age": 25}');

INSERT INTO test_jsonb (data) VALUES 
('{"name": "Alice", "age": 30}'),
('{"name": "Bob", "age": 25}');

方法三:使用 pg_dump 和 pg_restore

对于大型数据集,先导出为自定义格式:

pg_dump -Fc -t test_table -f dump_file.dump dbname

恢复时指定格式转换:

pg_restore --data-only -j 4 -d new_db dump_file.dump

操作差异与注意事项

  • 性能差异:JSONB 的导入速度通常比 JSON 慢,因为需要转换为二进制格式,但查询性能更好。
  • 存储空间:JSONB 可能比 JSON 占用更多空间,但压缩效果更好。
  • 索引支持:只有 JSONB 支持 GIN 索引,大幅提高查询效率:
    CREATE INDEX idx_jsonb ON test_jsonb USING GIN (data);
    

实际应用示例

查询 JSONB 字段中的嵌套值:

SELECT data->'name' AS name FROM test_jsonb WHERE data @> '{"age": 30}';

更新 JSONB 字段内容:

UPDATE test_jsonb SET data = jsonb_set(data, '{age}', '31') WHERE data->>'name' = 'Alice';

最佳实践建议

  • 需要频繁查询或更新的场景优先选择 JSONB
  • 仅存储而不查询的简单场景可使用 JSON
  • 大规模导入时考虑禁用触发器和索引以提高速度
  • 对于超大数据集,建议分批导入并启用并行处理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值