每当我在太平洋标准时间下午5点之后创建数据时,manufactured_date
列都会更改为下一个日期。
例如,我今天在5:15 pm PST
输入了新数据2020-11-05
,存储在manufactured_date
列中的值是2020-10-06
查询select * from cars
给出以下结果
id | car_name | manufactured_date
---------------------------------
1 | Audi | 11-06-2020
2 | BMW | 11-06-2020
以下是cars
表的属性
column name | data type
-----------------------------
id | serial
car_name | varchar
manufactured_date | date
insert
查询是
insert
into
cars (car_name, manufactured_date)
values ('Audi', '11-05-2020');
如何消除此问题?
使用case
表达式:
select (case when (now() now() at time zone 'PST')::time >= '17:00:00'::time
then manufactured_date + interval '1 day'
else manufactured_date
end)
问题很可能是服务器在UTC中运行,即列基于UTC而不是PST时区。
为了验证这一点,你可以执行它,它应该根据服务器时区返回当前时间戳:
select now()
这真的很有趣!即使在玩了操作系统时区设置和PGTZ
环境变量之后,我也无法在我的虚拟机上重现您的问题。
你能试着不指望隐式数据类型转换吗?在当前的字符串文字之前添加DATE
指令可能会有所帮助:
INSERT INTO cars (car_name, manufactured_date)
VALUES ('Audi', DATE '2020-11-05');