批量/多次查询需要很长时间才能在Postgres中完成

时间:2011-06-13 18:39:46

标签: postgresql long-integer

我在postgres中创建了一个将数据插入表中的函数。该函数接收一个字符串,并在处理完后将值输入表中。我想要的是能够在pgAdmin中多次调用该函数,而不是分批运行它。

实施例: 在pgAdmin中打开我的sql查询窗口并输入

select customfunction('string1');
select customfunction('string2');
           ^
           .
           .
           .
           .
           v
select customfunction('string100000000');

当我尝试运行它时,它只在我运行大约6000行(6000个函数)时才有效。如果我在它运行时取消它它不会提交任何东西(甚至不是第一行)。我必须将它们分批切割以完成整个查询。如何在不批量运行的情况下实现这一目标。

我想复制并粘贴整个查询,等待一切都完成。现在,如果我批量运行超过10000行,则查询只会无限期地运行而无响应。有没有一种方法可以在每行运行该行后提交每一行?

我还想知道在查询运行时是否有人可以准确确定正在处理的行。

2 个答案:

答案 0 :(得分:2)

  

一旦运行该行,postgres是否可以提交每一行?

如果启用了自动提交,它将不会这样做 - 这也是默认设置,所以...你是否在使用begin语句进行调用之前?如果是这样,请在拨打电话前提交......

另外,请考虑准备声明或做杰克建议。

答案 1 :(得分:1)

您是否尝试将字符串批处理为文件,将文件导入表格(我将其称为string_table,其中包含一个名为string的列),并尝试:

select customfunction(string)
from string_table;

ETA:如果你想要某种进度指示器并且需要一次运行一个select,你可以使用脚本语言中的DBI从文件或表中读取字符串,迭代函数调用循环,然后在每次迭代时执行简单的控制台打印输出。