DbSchema 的 PostgreSQL 时区错误

PostgreSQL timezone error with DbSchema

我想将我的 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"

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

有什么想法吗?

找到解决问题的方法:

您必须以正确的时区开始 java。

在我的例子中,我的服务器是 GMT,所以我必须添加参数 -Duser.timezone=GMT

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

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

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

共有 87 个条目全部以 "Timezone":

开头
          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 从系统区域信息中获取它的值。

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