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
- Debian/Ubuntu系统:
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) - 找到
timezone和log_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就搞定了。你挨个试,有任何进展或者新的报错随时说!




