【问题标题】:Can COPY be used with a function?COPY 可以与函数一起使用吗?
【发布时间】:2017-04-10 02:58:09
【问题描述】:
我的任务是分析一个 postgresql 数据库。第一个要求是查看添加记录的速度,消除所有可能的外部瓶颈,以便找到我们的理论极限。
起初,我创建了一个包含示例数据的 csv 文件,并使用 COPY 函数将其读入。现在,所有记录都通过函数update_or_add() 添加。是否可以将 COPY 与 update_or_add() 一起使用,或者有没有我没有考虑过的更好的解决方案?
【问题讨论】:
标签:
postgresql
postgresql-copy
【解决方案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 函数,在这种情况下,您可以通过锁定主表并进行整体合并来更有效地大量完成它的工作。