You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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这类记录行最后修改时间的字段:

  1. 先完成字段基础配置,和上面的创建时间配置一致:
@property({
  type: 'Date',
  defaultFn: 'now',
  postgresql: {
    dataType: 'timestamp with time zone',
    default: 'NOW()'
  }
})
updatedAt?: Date;
  1. 在数据库迁移脚本中添加触发器逻辑,实现更新行时自动刷新时间:
-- 创建通用的更新时间戳函数,只需执行一次
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 21:24:03