我的任务是分析postgresql数据库。第一个要求是查看记录的添加速度,删除所有可能的外部瓶颈,以便找到理论上的限制。
首先,我创建了一个包含样本数据的csv文件,并使用COPY函数读取它。现在,所有记录都通过函数update_or_add()
添加。是否可以将COPY与update_or_add()
一起使用,还是有一个更好的解决方案,我还没有考虑过?
答案 0 :(得分:1)
而不是“对于行上的每一行调用update_or_add()”,您首选的方法应该是将“update_or_add”推广到集合中的所有行。
COPY
将来自外部来源的数据导入TEMPORARY
或UNLOGGED
表。然后编写一个查询,将复制的表中的数据合并到主表中,如同update_or_add()
一样,但同时为所有行。如果可以对主表进行并发修改,则可能需要使用LOCK TABLE main_table IN EXCLUSIVE MODE
锁定主表,以便在合并进行时其他事务只能SELECT
。
没有您的架构或知道update_or_add
的内容,很难说更多。猜测它是一个upsert / merge函数,在这种情况下,你可以通过锁定主表并进行整套合并来更有效地完成 massively 的工作。