指定另一个字段应与INSERT上的id字段具有相同的值

时间:2014-09-11 20:17:03

标签: postgresql database-design triggers

在Postgres表中,我有一个id字段(系统生成的标识符)和一个other_id字段。在插入期间,如果未提供other_id字段,我希望other_id采用id字段的值。这可能吗?如果是这样,怎么样?

1 个答案:

答案 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()