PostgreSQL:尝试连接数据库时出现异常

时间:2020-06-07 08:31:53

标签: postgresql

我正在使用Postgresql 12.0版。 在我的Java程序中,我这样做:

TimeZone.setDefault(new SimpleTimeZone(offset, zoneId, 0, 0, 0, 0, 0, 0,
                    0, 0));

当zoneId为“ ART”或“ EAT”时 而我的Java程序尝试连接到数据库时,出现此异常:

org.postgresql.util.PSQLException: FATAL: invalid value for parameter "TimeZone": "ART"
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2497) ~[postgresql-42.2.8.jar:42.2.8]
    at org.postgresql.core.v3.QueryExecutorImpl.readStartupMessages(QueryExecutorImpl.java:2618) ~[postgresql-42.2.8.jar:42.2.8]
    at org.postgresql.core.v3.QueryExecutorImpl.<init>(QueryExecutorImpl.java:135) ~[postgresql-42.2.8.jar:42.2.8]
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:250) ~[postgresql-42.2.8.jar:42.2.8]
    at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49) ~[postgresql-42.2.8.jar:42.2.8]
    at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:195) ~[postgresql-42.2.8.jar:42.2.8]
    at org.postgresql.Driver.makeConnection(Driver.java:458) ~[postgresql-42.2.8.jar:42.2.8]
    at org.postgresql.Driver.connect(Driver.java:260) ~[postgresql-42.2.8.jar:42.2.8]

(与“ TimeZone”相同的例外:“ EAT”。)

设置其他zoneId可以正常工作。

为什么此例外发生在“ ART”和“ EAT”区域ID上?

是否存在有效区域ID的列表或模式,因此避免设置无效的区域ID?

谢谢

2 个答案:

答案 0 :(得分:0)

查看此博客文章:https://blog.afnf.net/blog/68

看起来您可能偶然发现了Postgres服务器不支持的时区。该页面显示了如何查看/ usr / local / pgsql / share / timezone /的内容,从而为您提供了受支持的时区列表。

似乎您还可以通过postgres系统表/视图列出该列表:https://www.postgresql.org/docs/12/view-pg-timezone-names.html

也许使用UTC进行连接,然后从该视图中选择以查看支持哪些时区。

答案 1 :(得分:0)

“ ART”似乎是阿根廷时间的缩写。根据{{​​3}},“您不能将配置参数TimeZone或log_timezone设置为时区缩写”(尽管一些缩写也被视为全名,但“ ART”不是其中之一)。您可以改用全名:

set timezone TO 'America/Argentina/Buenos_Aires';