【问题标题】:PostgreSQL timezone error with DbSchemaDbSchema 的 PostgreSQL 时区错误
【发布时间】:2015-11-13 09:13:56
【问题描述】:

我想将我的 postgreSQL 服务器设置为 'Europe/Berlin' 但出现错误:

SET time zone 'Europe/Berlin';
ERROR:  invalid value for parameter "TimeZone": "Europe/Berlin"

但真正的问题在于 DdbSchema,当我想连接到我的数据库时,我遇到了错误

FATAL: invalid value for parameter "TimeZone": "Europe/Berlin"

当我连接到本地数据库但不连接到我的 NAS (Synology) 数据库时,DbSchema 有效。

有什么想法吗?

【问题讨论】:

    标签: postgresql timezone synology db-schema


    【解决方案1】:

    找到解决问题的方法:

    你必须用正确的时区启动java。

    就我而言,我的服务器是 GMT,所以我必须添加参数 -Duser.timezone=GMT

    • 对于 DbSchema,编辑文件 DbSchema.batDbSchema.sh
    • 找到SWING_JVM_ARGS的声明
    • 将参数-Duser.timezone=GMT添加到行尾
    • 使用此脚本 DbSchema.batDbSchema.sh 启动 DbSchema

    【讨论】:

      【解决方案2】:

      我认为您的解决方案只是解决有关 synology diskstation 上 zoneinfo 的实际问题的解决方法。

      尝试连接到我的 diskstation 上的 postgres 数据库时,我遇到了完全相同的错误。查询 select * from pg_timezone_names; 为您提供了 postgresql 知道的所有时区名称。

      共有 87 个条目均以“时区”开头:

                name          | abbrev | utc_offset | is_dst
      ------------------------+--------+------------+--------
       Timezone/Kuwait        | AST    | 03:00:00   | f
       Timezone/Nairobi       | EAT    | 03:00:00   | f
       ...
      

      已配置的 postgres timezonesets 包含更多条目,因此 postgres 在启动时构建此视图必须有另一个源。我发现有一个编译选项 --with-system-tzdata=DIRECTORY 告诉 postgres 从系统 zoneinfo 获取它的值。

      我查看了/usr/share/zoneinfo 并找到了一个名为Timezone 的子目录,其中正好有87 个条目。而且显然没有名为Europe 的子目录(带有一个名为Berlin 的时区文件)。我没有很快找到解决方案让 diskstation 自动或手动更新 tzdata,方法是解压缩 tzdata2016a.tar.gz 并制作 (make not found...)。作为快速修复,我从另一个 linux 系统复制了Berlin 时区文件,问题得到解决,因此我现在可以使用正确的时区“欧洲/柏林”通过 java/jdbc 进行连接!

      【讨论】:

        猜你喜欢
        • 2012-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-30
        • 2014-02-12
        • 2019-10-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多