2017-02-02 4 views
0

Допустим, мы имеем следующую таблицу my_table:Postgres: в то время как «таблица имеет строки» петля ...

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; 
+3

Обновления в SQL не удаляют записи, они (возможно) изменяют данные в уже существующих записях. –

+0

да, вы снова правы. Мое упущение, чтобы упомянуть, что процесс обновления касается не только «my_table», но и «other_table». Обновление последнего приводит к уменьшению числа строк в первом. Спасибо за комментарий, но ответ ниже понял. –

ответ

1

Вам нужно добавить транзакции, чтобы сделать его надежным, в противном случае у вас нет гарантии, что какой-либо другой пользователь или процесс не будет добавлять строку после вы считаете их, но до запуска обновлений. Вам действительно нужно:

while not done 
    begin transaction 
     if (count rows > 0) 
     do something that expects rows 
     else 
     done 
    end transaction 
Смежные вопросы