当前位置: 首页 > news >正文

PostgreSQL 中 now() 函数事务内行为异常,clock_timestamp() 成解决方案

【导语:开发者 Marcin 在开发 Emmett 库时,发现 PostgreSQL 中 now() 函数在事务内行为异常,导致分布式锁获取重试逻辑失效,最终找到用 clock_timestamp() 替代的解决方案。】


PostgreSQL 中 now() 函数事务内异常表现

PostgreSQL 中 now() 是常用的时间函数,但在事务内部调用时,行为出乎意料。它返回的是事务开始时的时间戳,而非每次调用时的当前时间。这意味着在同一事务内,无论代码运行多久、经过多少次重试,now() 的值始终是事务开启时的时间点。

异常引发的 Bug 场景

Marcin 遇到的具体场景是分布式锁的获取重试逻辑。当持有锁的事务超时释放后,需要用 WHERE lock_expires_at < now() 来找到已过期的锁并尝试重新获取。但由于整个重试流程在同一事务内,now() 永远等于事务开始的时间,WHERE 条件无法正确筛选出过期的锁,重试逻辑失效。

解决方案:用 clock_timestamp() 替代

解决方案是用 clock_timestamp() 替代 now()。与 now() 不同,clock_timestamp() 每次调用都返回真实的当前时间,即使在事务内部也能反映时间的流逝。

两者语义区别及使用场景

now() 适合在同一事务内需要所有记录共享同一时间戳的场景,例如审计日志中需要记录事务开始时间;而 clock_timestamp() 适合需要判断时间是否已经推进的场景,例如检查超时、处理定时任务。

编辑观点:此案例提醒开发者在使用 PostgreSQL 时间函数时,要充分考虑事务语义,避免因函数特性引发难以调试的生产问题。

http://www.zskr.cn/news/1454474.html

相关文章:

  • 通达信缠论插件终极指南:5分钟让复杂技术分析变简单
  • 绕过小米社区5级限制:一个Python脚本+替换系统App的BL解锁思路拆解
  • Arduino DS1307 RTC与OLED时钟项目:从I2C通信到时间显示全解析
  • 基于ESP8266与GPS模块的宠物追踪器:物联网全栈开发实践
  • ZYNQ-7020软硬协同电磁超声测厚方案:含伪随机编码激励、匹配滤波压缩与微伏级回波时延提取
  • 保姆级教程:在Proxmox VE 8上用OSX-PROXMOX脚本装macOS Monterey(附VNC远程避坑指南)
  • PHP文件上传处理完整指南
  • 【官方渠道变更公示】2026年6月南京建发璞云售楼处官方热线发布. - 速递信息
  • 磁轴键盘推荐!IQUNIX EV63实测 这键盘不入后悔
  • Python-sc2实战:教你写一个会运营的神族AI(自动造农民、水晶、兵营)
  • 2026咸阳各区金银铂金回收去哪靠谱?本地正规回收门店精选榜单+联系号码 - 余生黄金回收
  • RapidOCR:从毫秒级到微秒级的实时OCR推理优化技术架构
  • 从数据到地图:手把手教你用Arcgis完成人口统计与分级设色出图(附完整配置流程)
  • 2026年贵阳代理记账公司怎么选?资深财税服务商深度横评与官方直达指南 - 精选优质企业推荐官
  • PDFMathTranslate:科研人的终极翻译神器,5分钟告别英文论文阅读障碍
  • Adobe-GenP 3.0:如何高效管理Adobe Creative Cloud软件授权
  • 自动驾驶模型部署实战:将BevFormer的时空注意力模块移植到TensorRT(含性能优化技巧)
  • 液压泵的‘奇数’与‘偶数’:聊聊叶片数、柱塞数如何影响系统平稳性与你的咖啡机
  • 从皮肤病变到胸部CT:聊聊CPFNet模型在4类医学图像分割任务中的实战表现与调优心得
  • Arduino FFT实战:内存优化与实时频谱分析实现
  • 如何用3个月掌握大厂面试核心技能:Coding Interview University完整指南
  • go2rtc视频流转发工具:5分钟快速上手终极指南
  • ShawzinBot:3分钟掌握MIDI转游戏按键的终极指南
  • Nintendo Switch帧率解锁完全指南:FPSLocker终极配置教程
  • 真空泵吸力衰减成因解析与工业维护策略指南 - 资讯焦点
  • 基于GreenPAK的动态电流补偿智能门锁电机驱动方案
  • 微信小程序平台:生态格局与主流服务商深度解析
  • 用CubeMX给立创梁山派天空星(GD32F407VET6)点灯:从芯片包安装到下载避坑全流程
  • 基于Arduino与SIM800L的远程短信电子公告牌实现详解
  • 武汉繁声洪山区汽车音响2026亲测分享 - GrowthUME