我有一个键值表。
CREATE TABLE keyvalues (
key TEXT NOT NULL,
value TEXT
)
我想施加一个约束,如果一个键有一个值为 NULL 的条目,它不能有任何其他条目。我怎么做?
澄清一下:我想允许(“key1”,“value1”),(“key1”,“value2”)。但是如果我有(“key2”,NULL),我不想允许(“key2”,“value3”)。
我有一个键值表。
CREATE TABLE keyvalues (
key TEXT NOT NULL,
value TEXT
)
我想施加一个约束,如果一个键有一个值为 NULL 的条目,它不能有任何其他条目。我怎么做?
澄清一下:我想允许(“key1”,“value1”),(“key1”,“value2”)。但是如果我有(“key2”,NULL),我不想允许(“key2”,“value3”)。
您可以使用触发器,如下所示:
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