У меня есть plpgsql
функция, содержащая это
update allplaces set visittime = now() where visittime is null and person = 'me' and place = 'this';
if (FOUND) then
update allplaces set visittime = null where person = 'me' and place != 'this';
return true;
else
return false;
end if;
Таблица allplaces
имеет уникальное ограничение как create unique index indexallplaces on allplaces (person) where visittime is not null
, что означает, что у данного person
может быть только 1 запись с visittime
, которая не равна нулю.
Я пытаюсь переключить visittime
с моей записи (person
равно 'me'
), которая была раньше (place
равно любому), на ту, где place
равно 'this'
, но Я получаю уникальное нарушение ограничения для уникального индекса, который я упомянул. Я не могу установить старое значение равным нулю, не изменив его, убедившись, что новое значение было установлено, следовательно, необходимо проверить if (FOUND)
.
Как я могу изменить эту функцию postgres для работы? Функция использует plpgsql
, но это может быть и обычный SQL, если в этом случае это работает лучше.
EDIT
perform from allplaces where visittime is null and person = 'me' and place = 'this' and ...otherconditions...;
if (FOUND) then
update allplaces set visittime = null where person = 'me';
update allplaces set visittime = now() where person = 'me' and place = 'this' and ...otherconditions...;
return true;
else
return false;
end if;