1

我有一个键值表。

CREATE TABLE keyvalues (
  key TEXT NOT NULL,
  value TEXT
)

我想施加一个约束,如果一个键有一个值为 NULL 的条目,它不能有任何其他条目。我怎么做?

澄清一下:我想允许(“key1”,“value1”),(“key1”,“value2”)。但是如果我有(“key2”,NULL),我不想允许(“key2”,“value3”)。

4

1 回答 1

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'

好的

insert INTO keyvalues 
SELECT 'a','b'

好的

insert INTO keyvalues 
SELECT 'b',null

好的

insert INTO keyvalues 
SELECT 'b','b'

ERROR: Key-value not allowed

于 2021-02-18T21:53:07.007 回答