COPY可以与功能一起使用吗?

时间:2012-10-23 21:08:35

标签: postgresql postgresql-copy

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

首先,我创建了一个包含样本数据的csv文件,并使用COPY函数读取它。现在,所有记录都通过函数update_or_add()添加。是否可以将COPY与update_or_add()一起使用,还是有一个更好的解决方案,我还没有考虑过?

1 个答案:

答案 0 :(得分: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函数,在这种情况下,你可以通过锁定主表并进行整套合并来更有效地完成 massively 的工作。