在Postgres表中,我有一个id
字段(系统生成的标识符)和一个other_id
字段。在插入期间,如果未提供other_id
字段,我希望other_id
采用id字段的值。这可能吗?如果是这样,怎么样?
答案 0 :(得分:1)
我会考虑一种设计,其中other_id
保持NULL
而不是冗余地存储相同的值。您可以使用以下命令模拟查询中的当前设计:
COALESCE(other_id, id) As other_id
如果这不是一个选项,请创建触发器 BEFORE INSERT
,无论是违反插入还是仅覆盖other_id
,都会引发错误。真的很简单。或者,根据这个:if the other_id field is not supplied
,仅当列仍然是NULL
时才这样做。
对于名为tbl
的表:
CREATE FUNCTION trg_tbl_ins_bef()
RETURNS trigger AS
$func$
BEGIN
IF NEW.other_id IS NULL THEN -- only if still NULL
NEW.other_id := NEW.id; -- or just overwrite without IF ...
END IF;
RETURN NEW;
END
$func$ LANGUAGE plpgsql;
触发器:
CREATE TRIGGER ins_bef
BEFORE INSERT ON tbl
FOR EACH ROW EXECUTE PROCEDURE trg_tbl_ins_bef()