如何通过Loopback 4在PostgreSQL中自动生成timestamp时间戳
LoopBack 4 配合PostgreSQL自动生成timestamp时间戳的正确配置
你原配置不生效的核心原因是误用了extension字段,该字段用于指定PostgreSQL扩展,不能用来设置字段默认值,generated、autoGenerated参数也不适用于时间戳的自动生成场景。
静态创建时间(创建后不再变更)配置
适用于createdAt这类记录行创建时间的字段:
@property({ type: 'Date', defaultFn: 'now', postgresql: { dataType: 'timestamp with time zone', default: 'NOW()' } }) timestamp?: Date;
defaultFn: 'now'是LoopBack层面的兜底逻辑,你在代码中手动创建实体不赋值时,LoopBack会自动填充当前时间postgresql.default: 'NOW()'是数据库层面的默认值配置,所有直接操作数据库的插入行为也会自动填充时间戳
动态更新时间(每次修改行自动刷新)配置
适用于updatedAt这类记录行最后修改时间的字段:
- 先完成字段基础配置,和上面的创建时间配置一致:
@property({ type: 'Date', defaultFn: 'now', postgresql: { dataType: 'timestamp with time zone', default: 'NOW()' } }) updatedAt?: Date;
- 在数据库迁移脚本中添加触发器逻辑,实现更新行时自动刷新时间:
-- 创建通用的更新时间戳函数,只需执行一次 CREATE OR REPLACE FUNCTION update_updated_at_column() RETURNS TRIGGER AS $$ BEGIN NEW.updated_at = NOW(); RETURN NEW; END; $$ LANGUAGE plpgsql; -- 给对应业务表绑定触发器,替换your_table_name为实际表名 CREATE TRIGGER trigger_update_your_table_updated_at BEFORE UPDATE ON your_table_name FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
注意:修改配置后需要重新执行数据库迁移脚本更新表结构,旧表需要手动添加字段默认值或者触发器才能生效。
内容的提问来源于stack exchange,提问作者Kyano
相关产品推荐
相关产品推荐

