最小测试用例:
db = sqlalchemy.create_engine('postgres://foo@localhost/bar')
con=db.connect()
con.execute("select now();").first()
sleep(60)
con.execute("select now();").first()
两个execute语句返回相同的值,即使是什么时间"现在"已经改变了。我认为这是我运行db.connect()的时候。
我还使用了
形式的查询select * from table where ts > (now() - interval '1 hour');
他们表现出类似的问题。如果我添加具有最近时间戳的行,它们就会显示出来。因此,现在()的值被缓存了。实际查询是正在重新执行。这只是错误的查询。
如何关闭此功能?
答案 0 :(得分:3)
PostgreSQL中的当前时间戳有different functions。来自文档:
transaction_timestamp() statement_timestamp() clock_timestamp() timeofday() now()
transaction_timestamp()
相当于CURRENT_TIMESTAMP
,但是。{ 命名以清楚地反映它返回的内容。statement_timestamp()
返回当前语句的开始时间(更具体地说, 从客户端收到最新命令消息的时间)。statement_timestamp()
和transaction_timestamp()
返回相同内容 在事务的第一个命令期间的值,但可能不同 在后续命令中。clock_timestamp()
返回实际值 当前时间,因此即使在单个SQL中它的值也会发生变化 命令。timeofday()
是历史PostgreSQL函数。喜欢clock_timestamp()
,它返回实际的当前时间,但是作为a 格式化文本字符串,而不是带有时区值的时间戳。now()
是传统的PostgreSQL等价物transaction_timestamp()
。
您可能想要statement_timestamp()
。