假设一个表t
:
create table if not exists t(
a integer primary key generated by default as identity,
b integer,
c text
);
和简单插入insert into t (b, c) values (2, 'abc');
是否有任何选项如何重写此插入,因此列b
将是coalesce(b, a)
?因此,当b
为null
时,b
等于生成列a
。
我知道有一个选项使用RETURNING
关键字和更新或在插入触发器之前使用。
您打算做的事情会引入冗余,所以我建议您不要这样做。相反,在查询表时使用coalesce
。一个方便的解决方案是在表上创建一个视图。
如果您坚持在表中持久化,则必须使用触发器。