Postgres:虽然“表有行”循环...

时间:2017-02-02 13:25:41

标签: postgresql while-loop is-empty

我们说,我们有下表my_table:

id   Col1         Col2
1    some data    some data
2    some data    some data 
3    some data    some data  
4    some data    some data

另外,让我们假设存在表的更新过程,并且在执行之后,表以最少的行数结束。

我们希望迭代此过程,直到“my_table”没有行。可以肯定的是,在更新过程的有限次迭代之后,该表具有零行。

尝试这样做是否正确:

while (select count(id) from my_table) != 0 loop
  update process
  ...;
end loop;

1 个答案:

答案 0 :(得分:1)

您需要添加事务以使其可靠,否则您无法保证某些其他用户或进程在计算它们之后但在更新运行之前不会添加行。你真的需要:

while not done
   begin transaction
      if (count rows > 0)
         do something that expects rows
      else
         done
   end transaction