PostgreSQL 没有 on update current_timestamp 感觉好麻烦 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lucasj
V2EX    PostgreSQL

PostgreSQL 没有 on update current_timestamp 感觉好麻烦

  •  
  •   lucasj 2024-06-19 13:10:03 +08:00 3258 次点击
    这是一个创建于 556 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    除非有大量直接上数据库手改的数据的需求,否则 on update 这种意义不大
    lasuar
        2
    lasuar  
       2024-06-19 13:30:26 +08:00
    一般业务开发不建议依赖 db 的触发器或者`on update`机制,因为不够对开发人员来说不够清晰直观,排查问题时需要去检查 db schema 。
    mogita
        3
    mogita  
       2024-06-19 13:34:41 +08:00
    确实是个遗憾。不过已经习惯让 ORM 负责这些琐事了,或者在代码逻辑里简单封装一层。
    lichao
        4
    lichao  
       2024-06-19 13:36:49 +08:00
    用 ORM 不存在这些问题
    adoal
        5
    adoal  
       2024-06-19 14:06:00 +08:00   1
    想开一点,每个表都要创建一个 trigger ,只是操作上的麻烦一点,而且也只是一次性的。如果你团队里的人都认可这个事应该用数据库的机制做,那就不是啥麻烦。真正的麻烦是,你觉得应该用数据库的机制做,而其它人都觉得:程序员这种生物就应该把所有的事都放在编程的框架里做;程序员这种生物不是 DBA ,不熟悉也不应该熟悉特定数据库的高级 feature ,用编程语言框架才是自己吃饭的工具;咱们的业务虽然 QPS 不到 10 个但是应该按照双 11 的伸缩性不准酱表不准吹歌不准物理外键……相比之下,数据库端自动触发操作是用语法还是用触发器的差别连细节分歧都算不上。
    nulIptr
        6
    nulIptr  
       2024-06-19 15:28:55 +08:00
    @adoal 不得不说世界就是一个圈,古时候上大学的时候讲数据库 3 范式,后面上班了发现即使是最传统的 erp 行业,存储过程能写上百行,都不加外键约束。。。在后面微服务的时候讲起来 join 都不能用了,现在 lz 又倒回去想用数据库特性。
    前端也是,古时候 jsp/asp/php 都是服务端渲染,几年 spa 之后,现在又开始 react/vue 服务端渲染。
    yangg
        7
    yangg  
       2024-06-19 15:37:59 +08:00
    你用 pg 了再用 mysql 才知道多少东西 mysql 没有的。
    635925926
        8
    635925926  
       2024-06-19 16:01:17 +08:00
    每个表本来都要有个序列,不在乎多加个触发器
    zbinlin
        9
    zbinlin  
       2024-06-19 16:01:17 +08:00
    麻烦一点的作法:设置 current_timestamp 列的 default 为 CURRENT_TIMESTAMP ,然后 UPDATE 时 set 下 `current_timestamp = DEFAULT`
    dayeye2006199
        10
    dayeye2006199  
       2024-06-19 23:24:00 +08:00 via Android
    ORM 解千愁,数据库是什么,不存在的
    lait123
        11
    lait123  
       2024-12-02 12:57:52 +08:00
    @lichao 有个问题一直困扰着我.如果实际用户的表单内容没有发生改变. orm 依旧会生成 updated_at 并更新数据.如果用 mysql 的 on update current_timestamp. 那么 update 的时候 mysql 会自动检测内容是否发生了改变 才去更新数据.不会修改 updated_at 字段..
    问题就是 用 orm 接管 一定会更新 updated_at 字段.
    lichao
        12
    lichao  
       2024-12-09 10:53:41 +08:00 via iPhone
    @lait123 这种情况是你的 ORM 不够好,这种情况 update 不应该被执行
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2537 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 10:52 PVG 18:52 LAX 02:52 JFK 05:52
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86