Как наложить это ограничение исключения?

У меня есть таблица "ключ-значение".

      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

Другие вопросы по тегам