我的任务是分析一个 postgresql 数据库。第一个要求是查看添加记录的速度,消除所有可能的外部瓶颈,以便找到我们的理论极限。
起初,我创建了一个包含示例数据的 csv 文件,并使用 COPY 函数将其读入。现在,所有记录都通过一个函数添加update_or_add()
。是否可以与 COPY 一起使用,update_or_add()
或者是否有我没有考虑过的更好的解决方案?
我的任务是分析一个 postgresql 数据库。第一个要求是查看添加记录的速度,消除所有可能的外部瓶颈,以便找到我们的理论极限。
起初,我创建了一个包含示例数据的 csv 文件,并使用 COPY 函数将其读入。现在,所有记录都通过一个函数添加update_or_add()
。是否可以与 COPY 一起使用,update_or_add()
或者是否有我没有考虑过的更好的解决方案?
而不是“为每一行调用 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 功能,在这种情况下,您可以通过锁定主表并进行整体合并来更有效地完成它的工作。