gpt4 book ai didi

postgresql - 如何在 Postgres 中批量插入忽略过程中可能发生的所有错误?

转载 作者:行者123 更新时间:2023-11-29 12:21:25 26 4
gpt4 key购买 nike

我必须每小时在表中插入大量日志记录,我不会关心在此过程中发生的完整性错误或违规。

如果我禁用 autoCommit 并执行批量插入,游标将不会插入事务失败行以外的任何内容。有解决办法吗?

一种技巧是在应用程序级别处理此问题。我可以实现一个 n 大小的缓冲区并进行批量插入。如果该事务中出现问题,递归地重复 buffer_first_half + buffer_second_half 的插入

def insert(buffer):
try:
bulk_insert(buffer)
except:
connection.rollback()

marker = len(buffer)/2

insert(buffer[:marker])
insert(buffer[marker:])

但我真的希望它是否可以使用任何 Postgres 的内置实现?

最佳答案

PostgreSQL 没有为此提供任何内置功能。您可以使用 SAVEPOINT,但它们并不比单个事务好多少。

将每个插入视为单独的事务并努力使这些 tx 更快:

  • SET synchronous_commit = off 在你的 session 中
  • INSERT 到一个UNLOGGED 表中,然后INSERT INTO ... SELECT 检查后结果到真实的表中

Here's an earlier closely related answer这也链接到更多信息。我没有将其标记为重复项,因为另一个特定于类似更新插入的数据加载,您对更一般的错误处理感兴趣。

关于postgresql - 如何在 Postgres 中批量插入忽略过程中可能发生的所有错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21057552/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com