【问题标题】:postgresql now() function returned future datepostgresql now() 函数返回未来日期
【发布时间】:2025-12-19 10:30:17
【问题描述】:

今天我发现我的许多生产数据库都有名为 status_update 的列的未来日期,该日期仅由 now() 函数设置。

大部分日期是 10 月 8 日:

  • 2014-10-08 08:20:42.97564
  • 2014-10-08 16:31:30.304743

但其中一些:

  • 2014-10-09 08:31:44.775589
  • 2014-10-10 08:50:24.235533
  • 2014-10-13 10:42:20.038917

请问谁能帮我解决这个问题?怎么可能?

我的应用程序是基于 PHP 构建的。当前时间为 2014-10-07 17:35:00。

SELECT now() 返回2014-10-07 17:35:56.192627+01

提前致谢。

更新

我的错,我错过了用于设置 status_update 值的pjobdate + current_time 表达式。对不起。

【问题讨论】:

  • now() 不会在任何表上设置任何列。请向我们展示您的逻辑(例如您的触发器),它会更新该列。
  • 嗨@pozs,多亏了你,我重新检查了所有函数和触发器,发现这个表达式pjobdate + current_time 用于设置status_update 的值。我很惊讶,因为我以为我学会了这个项目。

标签: php postgresql timestamp


【解决方案1】:

可能是时区问题,请参阅: Local time zone offset in PostgreSQL

试试

 SELECT  current_setting('TIMEZONE');

这对于 2014-10-08 日期可能是正确的,未来的可能是从其他地方设置的日期开始。我会查看所有更新该列的位置、触发器、过程、PHP 代码等

【讨论】:

  • 感谢您的回答。所有数据库都应该有“欧洲/伦敦”时区。是的,我已按照您的建议检查了所有位置。这个项目很大,可能我错过了一些东西,我会在找到任何东西时告诉你。