PostgreSQL如何在SELECT查询中为所有行添加相同的Unix时间戳?
在PostgreSQL中为所有行添加统一Unix时间戳的方法
核心结论
你提到的now()方法实际是可行的——PostgreSQL里的now()会绑定当前事务的开始时间,同一查询(同一事务)内所有行调用now()都会返回相同值,哪怕处理数百万行耗时数秒,时间戳也不会出现差异。
更稳妥的写法(可选)
如果想更直观地确保时间戳固定,还可以预先计算一次时间戳,再应用到所有行:
- 用CTE方式:
WITH fixed_ts AS ( SELECT EXTRACT(EPOCH FROM now()) AS queryId ) SELECT id, queryId FROM books, fixed_ts;
- 用子查询方式:
SELECT id, (SELECT EXTRACT(EPOCH FROM now())) AS queryId FROM books;
这两种写法会先计算出唯一的时间戳值,再关联到每一行,彻底消除歧义。
关于“时间戳差异”的说明
如果之前观察到时间戳不一致,大概率是因为多次执行查询(不同事务)导致的,而非同一查询内的行之间出现差异——同一事务内的now()值是绝对固定的。
内容的提问来源于stack exchange,提问作者amhev
相关产品推荐
相关产品推荐

