Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 指定另一个字段的值应与插入时的id字段的值相同_Postgresql_Database Design_Triggers - Fatal编程技术网

Postgresql 指定另一个字段的值应与插入时的id字段的值相同

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 如果这不是一个选项,请在插入之前创建一个触发器,该触发器要么因违

在Postgres表中,我有一个
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()

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