Как наложить это ограничение исключения?
У меня есть таблица "ключ-значение".
CREATE TABLE keyvalues (
key TEXT NOT NULL,
value TEXT
)
Я хочу наложить ограничение: если в ключе есть запись со значением NULL, у него не может быть других записей. Как я могу это сделать?
Чтобы уточнить: я хочу разрешить ("ключ1", "значение1"), ("ключ1", "значение2"). Но если у меня есть ("key2", NULL), я не хочу разрешать ("key2", "value3").
1 ответ
Вы можете использовать триггер, например:
CREATE OR REPLACE FUNCTION trigger_function()
RETURNS trigger
LANGUAGE plpgsql
AS $function$
begin
if exists (select 1 from keyvalues key = new.key and value is null) then
RAISE EXCEPTION 'Key-value not allowed';
end if;
RETURN new;
end;
$function$
;
Затем вы создаете триггер на столе
CREATE TRIGGER trigger_on_table
BEFORE INSERT OR UPDATE
ON keyvalues
FOR EACH ROW
EXECUTE PROCEDURE trigger_function();
И протестируем это:
insert INTO keyvalues
SELECT 'a','a'
Ok
insert INTO keyvalues
SELECT 'a','b'
Ok
insert INTO keyvalues
SELECT 'b',null
Ok
insert INTO keyvalues
SELECT 'b','b'
ERROR: Key-value not allowed