V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lucasj
V2EX  ›  PostgreSQL

PostgreSQL 没有 on update current_timestamp 感觉好麻烦

  •  
  •   lucasj · 176 天前 · 2086 次点击
    这是一个创建于 176 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前一直用 MySQL ,最近一个新项目用的是 PostgreSQL 。

    PostgreSQL 没有 on update current_timestamp 只能通过触发器来实现。

    这样的话每个表都要创建一个 trigger ,感觉好麻烦。

    12 条回复    2024-12-09 10:53:41 +08:00
    chendy
        1
    chendy  
       176 天前
    最好还是通过程序实现,事件机制,SQL 拦截器都不错
    而且这些机制不仅可以做时间的自动刷新,还可以自动刷新最后修改者之类的

    除非有大量直接上数据库手改的数据的需求,否则 on update 这种意义不大
    lasuar
        2
    lasuar  
       176 天前
    一般业务开发不建议依赖 db 的触发器或者`on update`机制,因为不够对开发人员来说不够清晰直观,排查问题时需要去检查 db schema 。
    ck65
        3
    ck65  
       176 天前
    确实是个遗憾。不过已经习惯让 ORM 负责这些琐事了,或者在代码逻辑里简单封装一层。
    lichao
        4
    lichao  
       176 天前
    用 ORM 不存在这些问题
    adoal
        5
    adoal  
       176 天前   ❤️ 1
    想开一点,每个表都要创建一个 trigger ,只是操作上的麻烦一点,而且也只是一次性的。如果你团队里的人都认可这个事应该用数据库的机制做,那就不是啥麻烦。真正的麻烦是,你觉得应该用数据库的机制做,而其它人都觉得:程序员这种生物就应该把所有的事都放在编程的框架里做;程序员这种生物不是 DBA ,不熟悉也不应该熟悉特定数据库的高级 feature ,用编程语言框架才是自己吃饭的工具;咱们的业务虽然 QPS 不到 10 个但是应该按照双 11 的伸缩性不准酱表不准吹歌不准物理外键……相比之下,数据库端自动触发操作是用语法还是用触发器的差别连细节分歧都算不上。
    nulIptr
        6
    nulIptr  
       176 天前
    @adoal 不得不说世界就是一个圈,古时候上大学的时候讲数据库 3 范式,后面上班了发现即使是最传统的 erp 行业,存储过程能写上百行,都不加外键约束。。。在后面微服务的时候讲起来 join 都不能用了,现在 lz 又倒回去想用数据库特性。
    前端也是,古时候 jsp/asp/php 都是服务端渲染,几年 spa 之后,现在又开始 react/vue 服务端渲染。
    yangg
        7
    yangg  
       176 天前
    你用 pg 了再用 mysql 才知道多少东西 mysql 没有的。
    635925926
        8
    635925926  
       176 天前
    每个表本来都要有个序列,不在乎多加个触发器
    zbinlin
        9
    zbinlin  
       176 天前
    麻烦一点的作法:设置 current_timestamp 列的 default 为 CURRENT_TIMESTAMP ,然后 UPDATE 时 set 下 `current_timestamp = DEFAULT`
    dayeye2006199
        10
    dayeye2006199  
       175 天前 via Android
    ORM 解千愁,数据库是什么,不存在的
    lait123
        11
    lait123  
       10 天前
    @lichao 有个问题一直困扰着我.如果实际用户的表单内容没有发生改变. orm 依旧会生成 updated_at 并更新数据.如果用 mysql 的 on update current_timestamp. 那么 update 的时候 mysql 会自动检测内容是否发生了改变 才去更新数据.不会修改 updated_at 字段..
    问题就是 用 orm 接管 一定会更新 updated_at 字段.
    lichao
        12
    lichao  
       3 天前 via iPhone
    @lait123 这种情况是你的 ORM 不够好,这种情况 update 不应该被执行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2730 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 14:15 · PVG 22:15 · LAX 06:15 · JFK 09:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.