我在postgres中创建了一个将数据插入表中的函数。该函数接收一个字符串,并在处理完后将值输入表中。我想要的是能够在pgAdmin中多次调用该函数,而不是分批运行它。
实施例: 在pgAdmin中打开我的sql查询窗口并输入
select customfunction('string1');
select customfunction('string2');
^
.
.
.
.
v
select customfunction('string100000000');
当我尝试运行它时,它只在我运行大约6000行(6000个函数)时才有效。如果我在它运行时取消它它不会提交任何东西(甚至不是第一行)。我必须将它们分批切割以完成整个查询。如何在不批量运行的情况下实现这一目标。
我想复制并粘贴整个查询,等待一切都完成。现在,如果我批量运行超过10000行,则查询只会无限期地运行而无响应。有没有一种方法可以在每行运行该行后提交每一行?
我还想知道在查询运行时是否有人可以准确确定正在处理的行。
答案 0 :(得分:2)
一旦运行该行,postgres是否可以提交每一行?
如果启用了自动提交,它将不会这样做 - 这也是默认设置,所以...你是否在使用begin语句进行调用之前?如果是这样,请在拨打电话前提交......
另外,请考虑准备声明或做杰克建议。
答案 1 :(得分:1)
您是否尝试将字符串批处理为文件,将文件导入表格(我将其称为string_table,其中包含一个名为string的列),并尝试:
select customfunction(string)
from string_table;
ETA:如果你想要某种进度指示器并且需要一次运行一个select,你可以使用脚本语言中的DBI从文件或表中读取字符串,迭代函数调用循环,然后在每次迭代时执行简单的控制台打印输出。