【发布时间】:2021-05-22 09:09:59
【问题描述】:
我有一个大的 json 文件 (9 gb),其中包含一个或多或少 950k 嵌套字典的列表(这是在 python 中生成的),它们用逗号分隔并且总体具有这种结构:
{'orderId': 111,
'dateCreated': '2019-03-06 16:00:12',
'Customer': {'customerCode': 222,
'customerName1': 'NAME',
'deliveryPostCode': '332',
'deliveryAddress': 'Street 5',
'deliveryCity': 'Any'},
'Products': [{'delivery': '3323',
'productCode': 2221,
'quantity': 1.0,
'unitOfMeasure': 'Kilo',
'packNum': '3232',
'prodFam': 222},
{'delivery': '554',
'productCode': 223321,
'quantity': 1.0,
'unitOfMeasure': 'Kilo',
'packNum': '3232',
'prodFam': 222},
{'delivery': '332',
'productCode': 222,
'quantity': 1.0,
'unitOfMeasure': 'Kilo',
'packNum': '3232',
'prodFam': 222}]}
我想在 postgre 表中导入每个 dict,比如说:
CREATE TABLE orders (orders jsonb);
问题是,我的计算机有 16gb 的 RAM,但我无法使用以下方法将其导入 postgre:
sql> \set content `type C:\test\dict.json`
sql> insert into orders values (:'content');
失败并出现错误:
type C:\test\dict.json: exhausted memory
如何按块大小进行导入?我知道我可以使用 linux 中的 cat 命令来做到这一点,但在 Windows 中我不知道该怎么做。 我想直接在 postgre 中执行此操作,因为通过 python 执行时我也遇到了内存问题。
我使用的是 Windows 10 和 Postgre 13.2
谢谢!
【问题讨论】:
-
为什么要把9GB的json放到单行的单列中?我正在努力弄清楚你会用它做什么。我的意思是,您将永远无法将其读回并对其进行任何操作,对吗?不是只有 16GB 的 RAM
-
@RichardHuxton 实际上我想把每个 dict 放在一行中,而不是全部放在一个中
-
但是您的 SQL 将它们视为单行,不是吗?为什么还要麻烦这个文件——为什么不直接将数据从 python 插入到 db 中呢?
标签: python json windows postgresql memory-management