【问题标题】:Can COPY be used with a function?COPY 可以与函数一起使用吗?
【发布时间】:2017-04-10 02:58:09
【问题描述】:

我的任务是分析一个 postgresql 数据库。第一个要求是查看添加记录的速度,消除所有可能的外部瓶颈,以便找到我们的理论极限。

起初,我创建了一个包含示例数据的 csv 文件,并使用 COPY 函数将其读入。现在,所有记录都通过函数update_or_add() 添加。是否可以将 COPY 与 update_or_add() 一起使用,或者有没有我没有考虑过的更好的解决方案?

【问题讨论】:

  • 我昨天发布了一个非常相似问题的示例代码here

标签: postgresql postgresql-copy


【解决方案1】:

您首选的方法应该是泛化“update_or_add”以适用于集合中的所有行,而不是“为每一行调用该行上的 update_or_add()”。

COPY 将来自外部源的数据放入TEMPORARYUNLOGGED 表中。然后编写一个查询,将复制表中的数据合并到主表中,就像update_or_add() 一样,但同时针对所有行。如果可以同时修改主表,这可能需要用LOCK TABLE main_table IN EXCLUSIVE MODE 锁定主表,以便在合并进行时其他事务只能从它SELECT

如果没有您的架构或不知道 update_or_add 做了什么,很难说更多。猜测它是一个 upsert/merge 函数,在这种情况下,您可以通过锁定主表并进行整体合并来更有效地大量完成它的工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-15
    • 2019-11-14
    • 2012-05-24
    • 2023-02-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2020-08-13
    相关资源
    最近更新 更多