Хотя это можно сделать с помощью триггеров и ограничений, для них, вероятно, требуется индекс. Вместо этого рассмотрим таблицу объединения.
create table things_applied (
id smallint primary key default 1,
thing_id bigint references things(id) not null,
check(id = 1)
);
Поскольку первичный ключ уникален, может быть только одна строка .
Первая активируется с помощью вставки. .
insert into things_applied (thing_id) values (1);
Измените его, обновив строку.
update things_applied set thing_id = 2;
Чтобы полностью деактивировать, удалите строку.
delete things_applied;
Чтобы найти активную строку, присоединитесь с таблицей.
select t.*
from things t
join things_applied ta on ta.thing_id = t.id
Чтобы проверить, активна ли она вообще, подсчитайте строки.
select count(id) as active
from things_applied
Попробуйте.