You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

DBeaver通过SSH隧道连接VPS上PostgreSQL时报时区参数无效错误求助

DBeaver通过SSH隧道连接VPS上PostgreSQL时报时区参数无效错误求助

兄弟我之前踩过几乎一模一样的坑!SSH隧道通得好好的,但PostgreSQL连接就卡时区参数上,给你几个亲测有效的排查和解决方向,挨个试试:

1. 先确认VPS上PostgreSQL支持的时区列表

首先得搞清楚你的PostgreSQL服务器到底认不认Asia/Calcutta这个时区。登录到VPS,打开PostgreSQL命令行(psql -U 你的数据库用户名),执行这条查询:

SELECT * FROM pg_timezone_names WHERE name LIKE '%Calcutta%' OR name LIKE '%Kolkata%';
  • 如果查不到任何结果,说明服务器的时区数据库不全,得先装时区数据:
    • Debian/Ubuntu系统:sudo apt install tzdata
    • CentOS/RHEL系统:sudo yum install tzdata
      装完之后重启PostgreSQL服务:sudo systemctl restart postgresql

2. 调整DBeaver的时区设置

有时候是DBeaver自动传的时区服务器不认,手动改一下:

  • 打开你的PostgreSQL连接编辑界面,切换到「高级」标签页
  • 在「驱动属性」里找到TimeZone参数,把它改成刚才查询到的服务器支持的时区(比如Asia/Kolkata,或者先临时改成UTC测试能不能连上)
  • 保存设置后再测试连接

3. 修正PostgreSQL服务器的时区配置

如果服务器本身的时区参数配置有问题,也会导致这个报错:

  • 找到PostgreSQL的配置文件postgresql.conf(路径一般是/etc/postgresql/你的版本号/main/postgresql.conf,比如14版就是/etc/postgresql/14/main/postgresql.conf
  • 找到timezonelog_timezone这两个参数,把它们改成服务器系统支持的时区,比如:
    timezone = 'Asia/Kolkata'
    log_timezone = 'Asia/Kolkata'
    
  • 改完保存,重启PostgreSQL服务:sudo systemctl restart postgresql

4. 直接在DBeaver的连接URL里强制指定时区

如果上面的方法都没效果,试试手动在连接URL里加时区参数:

  • 回到DBeaver连接编辑界面,切换到「主」标签页,勾选「显示所有属性」或者直接切换到「URL」输入框
  • 在URL末尾加上?serverTimezone=Asia/Kolkata(比如原本的URL是jdbc:postgresql://localhost:5432/你的数据库名,改成jdbc:postgresql://localhost:5432/你的数据库名?serverTimezone=Asia/Kolkata
  • 保存后测试连接

额外排查点

  • 先跳过DBeaver,用本地的psql命令通过SSH隧道连试试:psql -h localhost -p 你的隧道本地端口 -U 数据库用户名 -d 数据库名,如果也报同样的错,说明问题出在服务器或隧道的时区映射,不是DBeaver的问题
  • 确认VPS的系统时区是否正确:执行timedatectl,看输出里的Time zone是不是服务器支持的时区,PostgreSQL默认会继承系统时区配置

我当时是因为VPS上的tzdata包没装全,装完重启PostgreSQL就搞定了。你挨个试,有任何进展或者新的报错随时说!

火山引擎 最新活动