当前位置: 首页 > 知识库问答 >
问题:

PostgreSQL 9.2 JDBC驱动程序使用客户端时区?

应煌
2023-03-14

使用带有PostgreSQL JDBC驱动程序的PostgreSQL数据库,我遇到了一个有趣的挑战。似乎最新版本的驱动程序9.2在执行日期/时间匹配时使用客户端时区。

select now(), extract(timezone FROM now()), current_setting('TIMEZONE'), now()-interval '1 hour' as "1HourAgo"
now                         date_part   current_setting     1HourAgo
2013-08-26 15:33:57.590089  -14,400     US/Eastern          2013-08-26 14:33:57.590089
now                         date_part   current_setting     1HourAgo
2013-08-26 15:41:49.067903  0           UTC                 2013-08-26 14:41:49.067903
WHERE end_time between now() - interval '1 hour' and now()
WHERE end_time at time zone 'EDT' between now() - interval '1 hour' and now()
    null

共有1个答案

孙海
2023-03-14

我自己也碰到了这个问题。我验证了postgres jdbc驱动程序确实从jvm获取了连接时区,但我无法找到覆盖此行为的方法。如果他们为此提供一个jdbc url连接参数,那就真的很好了。

作为一种解决办法,我发现我的连接池库(HikariCP)可以为每个新连接执行一条sql语句:

hikariConfig.setConnectionInitSql("set time zone 'UTC'");
 类似资料:
  • 出身背景 我有一个远程托管服务器,它运行java vm,带有多人实时问答游戏的自定义服务器代码。服务器处理配对、房间、大厅等。我还在同一个空间使用Mongo db,其中包含手机问答游戏的所有问题。 这是我第一次尝试这样的项目,虽然我精通Java,但我的mongo技能充其量只是新手。 客户单例 我的服务器包含mongo客户端的静态单例: 注意: Mongo客户端对我来说是新的,我知道未能正确使用连池

  • 背景资料: 我有一个PHP脚本,它解析文本文件并使用它将数据插入mongo数据库。我不再使用旧的Mongo PHP驱动程序,而是使用MongoDB\driver类(http://php.net/manual/en/book.mongodb.php) 问题 有一段代码,我试图用新类重写,但我似乎无法让它工作——也就是它没有向数据库写入数据...我也不知道如何找到错误。 旧代码: 这是旧代码: 新代码

  • 我试图了解MySQL JDBC驱动程序中的客户端仿真准备语句是如何工作的。 第1部分我在网上读到,对于准备好的语句,关系数据库处理JDBC/SQL查询时涉及四个步骤,它们如下: 分析传入的SQL查询 编译SQL查询 规划/优化数据采集路径 执行优化的查询/获取并返回数据 如果客户端仿真准备好的语句没有往返数据库,那么它如何执行步骤3?还是客户端仿真准备语句的工作方式不同? 第二部分我还做了两个实验

  • 我试图使用servlet上的Java驱动程序连接到托管在mlab上的MongoDB数据库。 问题是我得到以下错误: 这样做对吗?我还应该做什么/代替吗?

  • 我正在尝试使用由Cassandra支持的MapStore。为此,使用ClientUserCodeDeploymentConfig将这些MapStore和MapLoader实现推送到Hazelcast成员,如下所示 我在初始化CassandRamapStoreFactory时看到以下问题。这似乎是Java9模块特性的问题,而我使用的是Java11。请指导我如何在客户机/服务器部署方法中使用Hazel

  • 我的工作是这样的: https://spark.apache.org/docs/latest/running-on-kubernetes.html 下面是驱动程序用于引导集群的代码: