Postgresql 指定另一个字段的值应与插入时的id字段的值相同
在Postgres表中,我有一个Postgresql 指定另一个字段的值应与插入时的id字段的值相同,postgresql,database-design,triggers,Postgresql,Database Design,Triggers,在Postgres表中,我有一个id字段(系统生成的标识符)和一个other\u id字段。在插入过程中,如果未提供other_id字段,我希望other_id采用id字段的值。这可能吗?如果是这样的话,< p>我会考虑一个设计,在这里代码< > OffyIDID>代码>保留代码> null ,而不是冗余地存储相同的值。您可以通过以下方式在查询中模拟当前设计: COALESCE(other_id, id) As other_id 如果这不是一个选项,请在插入之前创建一个触发器,该触发器要么因违
id
字段(系统生成的标识符)和一个other\u id
字段。在插入过程中,如果未提供other_id
字段,我希望other_id
采用id字段的值。这可能吗?如果是这样的话,< p>我会考虑一个设计,在这里代码< > OffyIDID>代码>保留代码> null <代码>,而不是冗余地存储相同的值。您可以通过以下方式在查询中模拟当前设计:
COALESCE(other_id, id) As other_id
如果这不是一个选项,请在插入之前创建一个触发器,该触发器要么因违反插入而引发错误,要么直接覆盖其他id
。这很简单,真的。或者,根据这一点:如果未提供另一个_id字段
,则仅当该列仍然为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()
我想知道为什么有人-你。。。我讨厌人们在没有评论的情况下这样做,这就是触发器的作用