我正在设计PostgreSQL模式,我想创建一个规则,如果用户不输入C列的值,那么我将C列的值设为COALESCE(COLUMN A,COLUMN B)。我已经尝试过表更新和触发器,但是逻辑上一定有问题,非常感谢您的帮助-谢谢。
我尝试过:
1。
update Mytable
set ColC=
case when ColC is NULL then COALESCE(ColA,ColB)
else ColC;
2。
CREATE TRIGGER ColC_VIOLATION
BEFORE INSERT OR UPDATE OF ColC
ON Mytable FOR EACH ROW
WHEN ColC is NULL then COALESCE(ColA,ColB)
3。
CREATE OR REPLACE FUNCTION ColC_func() RETURNS trigger AS
$$
BEGIN
UPDATE Mytable
set ColC=
case when ColC is NULL then COALESCE(ColA,ColB)
else ColC ;
END
$$
LANGUAGE PLPGSQL;
您在触发器中不需要UPDATE
语句,只需分配值:
CREATE OR REPLACE FUNCTION ColC_func() RETURNS trigger AS
$$
BEGIN
new.colc := COALESCE(cola,colb);
END
$$
LANGUAGE PLPGSQL;
并且仅当colc
为空时才触发触发器:
CREATE TRIGGER ColC_VIOLATION
BEFORE INSERT OR UPDATE on mytable
FOR EACH ROW execute procedure colc_func()
WHEN ColC is NULL;