例如我有这张桌子
CREATE TABLE public."table" (
c1 int4 NOT NULL,
c2 int4 NOT NULL,
c3 int4 NOT NULL,
d varchar(20) NULL,
e varchar(20) NULL,
f date NULL
CONSTRAINT table_pkey PRIMARY KEY (c1, c2, c3)
);
我想添加一个限制,仅当指定c1和c2和c3时才可以删除,否则不允许删除
我的意思是
delete from public."table" where c1=X
抛出错误!
delete from public."table" where c2=Y
抛出错误!
delete from public."table" where c3=Z
抛出错误!
delete from public."table" where c1=X and c2=Y
抛出错误!
delete from public."table" where c1=X and c3=Z
抛出错误!
等等
只有在以下情况下才可以删除
delete from public."table" where c1=X and c2=Y and c3=Z
X,Y,Z 是随机值
我尝试
CREATE OR REPLACE FUNCTION verify_delete()
RETURNS TRIGGER AS $$
BEGIN
IF OLD.c1 IS NULL OR OLD.c2 IS NULL OR OLD.c3 IS NULL THEN
RAISE EXCEPTION 'ERROR!';
END IF;
RETURN OLD;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER trigger_verify_delete
BEFORE DELETE ON "table"
FOR EACH ROW
EXECUTE procedure verify_delete();
没有运气
有什么建议或想法吗?
没有办法实现你的要求。您应该做什么取决于您真正的问题是什么。
如果您的问题是编写得不好的交互式语句可能会无意中删除太多行,则可以使用语句级触发器来解决该问题,如果转换表包含太多行,该触发器将引发错误。