使用 node-postgres 和原始 sql 进行查询时的时间戳不同

Different timestamp when querying with node-postgres and raw sql

提问人:Mirabror Sodikov 提问时间:11/12/2023 最后编辑:Mirabror Sodikov 更新时间:11/13/2023 访问量:66

问:

我的postgres数据库在docker中运行。我从主机终端启动了nestjs服务器。数据库是在另一个微服务中创建的 与棱镜。

我的时区是 UTC+5。我正在使用 node-postgres 运行下面的查询:

INSERT INTO "Chat" default values RETURNING *

插入的数据保存为 -10h 而不是 -5h。

表定义:

CREATE TABLE "Chat" (
    "id" UUID NOT NULL DEFAULT gen_random_uuid(),
    "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,

    CONSTRAINT "Chat_pkey" PRIMARY KEY ("id")
);

我期望的是 node-postgres 应该插入带有 MY_TIME_ZONE - 5h 的行,而不是 MY_TIME_ZONE - 10h。

此外:

select current_timestamp; 
-- this returns:  2023-11-12 15:18:37.322506+00
-- while my time: 2023-11-12 20:18:37.322506+00
节点 .js PostgreSQL Docker Prisma SQL 时间戳

评论

0赞 Mirabror Sodikov 11/12/2023
为什么 now() 在 insert 和 select 中有所不同?
0赞 Atmo 11/12/2023
您希望在两个连续查询中返回相同值的原因是什么?now()
0赞 Mirabror Sodikov 11/12/2023
@Atmo因为稍后选择插入的行时,created_at比我预期的要长 -5 小时
4赞 Atmo 11/12/2023
明白了。。。基本上,你问题的后半部分是无用的,你真正要问的是你在“我期望的是node-postgres应该返回完全相同的时间戳”之前显示的内容。 实际上可能与 相同。你知道前者是什么意思吗?您的计算机是否在 UTC+05:00(或者可能不太可能是 UTC-05:00)上运行?2023-11-12T02:55:51.480Z2023-11-12 07:55:51.480Z
0赞 Mirabror Sodikov 11/12/2023
@Atmo我更新了问题。插入的数据实际上比我的时区晚两倍。选择“查询正常工作”。

答:

0赞 Abdul Aziz 11/13/2023 #1

您可以在 postgresql 和 docker 中手动设置您当前基于的时区以同步它 -

SET timezone='UTC+5';

对于 postgresql 和 Docker,您可以通过执行以下命令来检查 Docker 容器中的当前时区设置:

docker exec -it <container_name_or_id> date

如果时区不正确,您可能需要在 Dockerfile 或docker-compose.yml中进行调整。例如,您可以设置环境变量 TZ -

environment:
  - TZ=Asia/Kolkata

并且,要使 node.js 应用程序知道发生了什么,请使用脚本开头的变量。process.env.TZ

process.env.TZ = 'UTC+5';

将它们全部同步在一起应该不允许任何错误的余地。