如何通过Table Input步骤获取PostgreSQL当前时间而非PDI端时间
获取PostgreSQL数据库服务器本地时间的解决方案
在PDI的Table Input步骤中,你用CURRENT_TIMESTAMP、LOCALTIMESTAMP得到的是PDI服务器/客户端时区的时间,原因是PostgreSQL的这类时间函数默认基于当前会话时区返回结果,而PDI连接数据库时会将自身服务器的时区作为会话时区传入。要获取数据库服务器的本地时间,可通过以下两种方式解决:
方法一:在SQL中强制转换为数据库服务器时区
直接在SQL中指定使用数据库服务器的时区来转换时间,无需修改PDI连接配置:
-- 方式1:手动指定数据库服务器时区(示例为Asia/Shanghai) TO_CHAR(CURRENT_TIMESTAMP AT TIME ZONE 'UTC' AT TIME ZONE 'Asia/Shanghai', 'YYYY/MM/DD HH24:MI:SS') AS p_db_time -- 方式2:动态读取数据库当前时区设置,无需硬编码 TO_CHAR(CURRENT_TIMESTAMP AT TIME ZONE 'UTC' AT TIME ZONE (SELECT current_setting('TIMEZONE')), 'YYYY/MM/DD HH24:MI:SS') AS p_db_time
方法二:修改PDI的PostgreSQL连接时区
调整PDI的数据库连接配置,让会话时区与数据库服务器时区一致:
- 打开PDI的PostgreSQL连接配置,在连接参数中添加:
serverTimezone=你的数据库时区(例如serverTimezone=Asia/Shanghai) - 或者直接在JDBC URL末尾追加参数:
&timeZone=Asia/Shanghai
配置完成后,原有的CURRENT_TIMESTAMP、LOCALTIMESTAMP语句就能返回数据库服务器的本地时间。
内容的提问来源于stack exchange,提问作者Mahari
相关产品推荐
相关产品推荐

