Postgres插入新行时如何实现指定列自动填充?
PostgreSQL实现插入时自动填充字段的方法
方案1:设置字段默认值(推荐,最简单)
这个方案不需要额外编写触发器,直接给两个字段配置默认值即可满足需求:
- creation_date默认值设为当前日期:
CURRENT_DATE,如果需要带时分秒可以替换为CURRENT_TIMESTAMP - creation_user默认值设为当前登录的数据库用户:
CURRENT_USER
如果是新建表,建表语句示例:
CREATE TABLE table_name ( nombre VARCHAR, creation_date DATE DEFAULT CURRENT_DATE, creation_user VARCHAR DEFAULT CURRENT_USER );
如果表已经创建完成,用ALTER语句修改字段默认值即可:
ALTER TABLE table_name ALTER COLUMN creation_date SET DEFAULT CURRENT_DATE, ALTER COLUMN creation_user SET DEFAULT CURRENT_USER;
配置完成后,你执行的insert table_name( nombre) values ('xxxxxx')语句就会自动填充两个字段的值,不需要额外修改插入逻辑。
方案2:使用触发器(适合有额外限制的场景)
如果要求这两个字段只能在插入时赋值,后续更新操作不能修改,或者插入时即使用户主动指定了这两个字段的值也要覆盖为自动生成的内容,可以用触发器实现:
- 首先创建触发器函数
CREATE OR REPLACE FUNCTION auto_fill_creation_fields() RETURNS TRIGGER AS $$ BEGIN NEW.creation_date = CURRENT_DATE; NEW.creation_user = CURRENT_USER; RETURN NEW; END; $$ LANGUAGE plpgsql;
- 给表绑定插入前触发的触发器
CREATE TRIGGER trigger_set_creation_fields BEFORE INSERT ON table_name FOR EACH ROW EXECUTE FUNCTION auto_fill_creation_fields();
内容的提问来源于stack exchange,提问作者EdwinMald
相关产品推荐
相关产品推荐

