如何将子字符串值插入PostgreSQL的json列中?

问题描述 投票:0回答:1

我有很多CSV,这些原始数据要放入一个主表中。我已将所有CSV导入为临时表。然后,我必须使用子字符串从临时表中提取特定的对应信息。当值为atomic时,此方法适用于状态列(varchar)。

当值不是原子的并且我不能使用字符串文字时,如何为attribute_list列(json)执行此操作?

INSERT INTO master_table (data_file_name, state, attribute_list) 

SELECT
'example_name', substring(data, 1, 2),
'{"percent_green_cover_august" : substring(data, 61, 2), 
"percent_green_cover_september" : substring(data, 63, 2)}'

FROM temp_table; 

编辑:问题是我从CSV上传了大约200个临时表。它们都是不同的。它们包含一个字段data(varchar),它是一系列空格和数字,例如:

11 1134 4446 48685 989
15 4 4 4 78 90 09 
01932938     838490 111
11 1

我有一个excel文件,其中包含代表每个CSV的行,并且列标题与值所代表的内容相对应。然后,我使用Python生成insert into语句。最初,每个列标题都将是数据库中自己的字段,但这将生成2000多个唯一列。

json postgresql string-literals
1个回答
0
投票

我建议您取消temp_table。在Postgres中包含原始CSV文本没有太大价值。

如果您的CSV文件具有一组固定的字段,请创建一个表,该表的所有列均与CSV相同。然后使用copy导入CSV。

copy

路径是在服务器上。如果数据库不是本地数据库,则必须从STDIN复制或使用COPY your_table(your, columns) FROM '/your/csv/file.csv' DELIMITER ',' CSV HEADER; 。大多数Postgres数据库接口都提供/copy from psql方法,使复制本地文件变得容易。


如果您的CSV文件没有固定的字段集,而您需要JSON,则在Postgres中这样做没有任何好处。使用您喜欢的编程语言进行处理会更简单。解析CSV文件,将字段转换为JSON对象,然后插入成品。


[构建JSON时,请勿手动构建。使用/copy,例如copy

[再见,太空牛仔。

© www.soinside.com 2019 - 2024. All rights reserved.