Единственный относительно удобный способ сделать это - использовать обновляемые представления:
create view vw_sometable as
select t.*
from sometable t
where endDate is null
with check option;
Затем вы вставите его в представление, а не в базовую таблицу.
Вы можетедалее уточните это, предоставив update
разрешения для представления, но не для базовой таблицы, поэтому все update
должны проходить через представление.
Хорошо, другой метод не вернул бы ошибку, но онне будет обновлять строки.Просто включите условие в предложение where
:
UPDATE public.SomeTable
SET Title = 'new title',
Description = 'new description'
WHERE Id = 4 AND EndDate is null';
Вы можете добавить последующую логику, чтобы проверить, обновляются ли какие-либо строки, и вызвать там ошибку.