我有一个added_at
类型的列timestamp without time zone
.我希望它的默认值是当前的日期时间但没有时区.该函数也now()
返回一个时区.
我该如何解决这个问题?
那么你可以这样做:
SELECT now() AT TIME ZONE current_setting('TimeZone'); SELECT now() AT TIME ZONE 'Europe/Paris'; SELECT now() AT TIME ZONE 'UTC';
不确定这对于"added_at"列是否有意义.您几乎总是希望绝对时间戳(带时区的时间戳)不是浮动时间戳.
编辑以下几点的回复:
是的,应该使用带时区(绝对时间)的时间戳,除非你有充分的理由不这样做.
客户端时区由SHOW TimeZone
或current_setting(...)
如上所示给出.
需要一些时间来浏览手册 - 它们很好地涵盖了所有这些.
SELECT now()::timestamp
就这样.演员表将时间戳转换为您时区的当前时间戳.这也是Postgres中标准SQL函数LOCALTIMESTAMP
的实现方式.
如果您不在多个时区操作,那就可以了.否则切换到timestamptz
了added_at
.区别?
在Rails和PostgreSQL中完全忽略时区
"当前日期/时间":
CURRENT_TIME和CURRENT_TIMESTAMP提供带时区的值; LOCALTIME和LOCALTIMESTAMP提供没有时区的值.