【发布时间】:2021-10-01 02:32:04
【问题描述】:
原来是这样,我有这样的程序:
CREATE OR REPLACE PROCEDURE public.savetrbankd(
_transcode text,
_id integer,
_expensecode text,
_debetamt numeric,
_creditamt numeric)
LANGUAGE 'plpgsql'
AS $BODY$
Declare
BEGIN
If _id=0 Then
INSERT INTO trbankd(transcode,expensecode,ket,debetamt,creditamt)
VALUES(_transcode,_expensecode,_ket,_debetamt,_creditamt);
Else
UPDATE trbankd SET
expensecode=_expensecode,
debetamt=_debetamt,
creditamt=_creditamt,
LastUpdatedDate=now()
WHERE transcode=_transcode and id=_id;
END IF;
END;
$BODY$;
让我们注意这里的“lastupdateddate”字段。类型为不带时区的timestamp,默认值为now()。
所以在使用此过程插入/更新记录后,我尝试再次查询数据。 所以我得到了: 2021-07-23 23:48:42.805869
但是当我插入/更新记录时,应该是 2021 年 7 月 24 日下午 1 点左右。 所以我们得到了大约 13-14 小时的时区差异?
当然,然后当我尝试显示时区时,它说是我们/太平洋。 然后我将时区设置为 asia/bangkok(这是我的真实时区),代码如下:set timezone='Asia/Bangkok'。 数据没有改变。它仍然说 lastupdateddate 是 2021 年 7 月 23 日。 好的,也许之前输入的数据不会改变,因为我使用了没有时区类型的时间戳。所以我尝试使用存储过程再次更新数据,它仍然显示 2021-07-24 00:29:23.384443
所以它仍然是大约 13-14 小时的相同差异。 我如何确保插入和查询的数据与服务器(恰好是我的计算机)相同。 作为补充说明,我的设置控制面板区域是我们(英语),我的位置已设置为印度尼西亚(gmt +7),并且我当前在计算机上的时间是正确的(就像我在上面所说的那样是下午 1-2 点)。
提前谢谢
【问题讨论】:
-
注意:
now()后面多了一个逗号 -
抱歉,我的剪辑不好。真正的存储过程实际上要长得多,所以我剪掉它只是为了让你知道图片。我已经修好了。我向你保证,真正的存储过程运行良好,之前没有这样的错误语法。
标签: postgresql timestamp timezone save region