转存数据一记
2020-02-25 本文已影响0人
triplestudio
偶得数据一块,形如下:
{
"SRCB": "深圳农村商业银行",
"BGB": "广西北部湾银行",
"SHRCB": "上海农村商业银行",
"BJBANK": "北京银行",
"WHCCB": "威海市商业银行",
"BOZK": "周口银行",
"KORLABANK": "库尔勒市商业银行",
"SPABANK": "平安银行",
"SDEB": "顺德农商银行",
......
}
欲存为基础数据,建项程控、寻求工具终觉繁琐。
灵感一现,::json
出现在脑海中,有它,这一块数据可以纹丝不动进行解析。
过程:解析之 - 建表 - 遍历插入之 - 表格显示之
这其中,防重建错误,防重复插入错误,PostgreSQL 皆有优雅处理策略。
写好基本结构,留一空予数据块,部分或全部,来之安之,可重复执行,谓之幂等。
基础结构如下:
DO $$
DECLARE
lv_row record;
jsonObj json := ''::json; /* 留空予数据块 */
BEGIN
-- 建表
create table if not exists bank(id varchar(10) primary key, name varchar(40));
-- 遍历插入
FOR lv_row IN SELECT * FROM json_each(jsonObj) LOOP
insert into bank(id, name) values( lv_row.key, jsonObj ->> lv_row.key) on conflict(id) do nothing;
END LOOP;
END $$;
-- 显示表格
select * from bank;
实例运行如下:
运行结果
知识点:
表不存在时才创建表create table if not exists bank(id varchar(10) primary key, name varchar(40));
json 行遍历 json_each(jsonObj)
插入冲突 on conflict(id) do nothing