【问题标题】:How to insert big json file into postgresql如何将大 json 文件插入 postgresql
【发布时间】: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


【解决方案1】:

PostgreSQL 中的数据项有 1GB 的硬性限制,但即使在该限制之前,您也可能会变得不满意。

这些数据是 JSON 格式的表格数据。因此,定义适当的表(不使用 JSON 数据类型),在客户端解包 JSON 并将 INSERT 数据放入表中。

【讨论】:

    猜你喜欢
    • 2015-06-12
    • 2017-01-06
    • 1970-01-01
    • 2019-11-20
    • 1970-01-01
    • 2021-10-16
    • 2022-01-27
    • 2022-08-19
    • 1970-01-01
    相关资源
    最近更新 更多