【问题标题】:Specify that another field should have the same value as the id field on INSERT指定另一个字段应与 INSERT 上的 id 字段具有相同的值
【发布时间】:2014-09-11 20:17:02
【问题描述】:

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

【问题讨论】:

  • 我想知道为什么有人 -1 你...我讨厌人们在没有评论的情况下这样做
  • 这就是触发器的作用

标签: postgresql database-design triggers


【解决方案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()

【讨论】:

    猜你喜欢
    • 2021-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    相关资源
    最近更新 更多