You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL如何查询客户端(而非服务端)的会话时区?

PostgreSQL会话时区查询方法

首先纠正一个常见认知偏差:你提到的SHOW TIME ZONE返回的不是固定的服务端全局时区,恰恰就是你需要的当前客户端会话的时区,默认格式就是IANA标准时区名称(比如Europe/Zurich、Australia/Sydney这类),可以直接传入timezone()等函数使用。

PostgreSQL的时区分为两个层级:

  • 全局服务端默认时区:是数据库启动时从配置文件postgresql.conf读取的默认值,仅作为新会话的初始时区使用
  • 会话级时区:每个客户端连接后可以独立修改,所有会话内的时间函数、时区转换默认都使用这个值,SHOW TIME ZONE默认返回的就是这个层级的时区。

几种获取会话时区的方式:

  1. 直接执行命令查询,适合手动调试时使用:
SHOW TIME ZONE;
  1. 用系统设置函数查询,适合嵌入到SQL语句中直接调用(你的转换场景可以直接用这个写法,不需要外部传入时区值):
-- 直接在timezone函数里调用即可
SELECT timezone(current_setting('TIMEZONE'), time_from_server) FROM your_table;
  1. PostgreSQL 12及以上版本还可以用专用函数获取:
SELECT pg_client_timezone();

如果你确实需要查询服务端的全局默认时区(而非当前会话时区),可以执行以下语句:

SELECT setting FROM pg_settings WHERE name = 'timezone' AND context = 'postmaster';

内容的提问来源于stack exchange,提问作者omatai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 17:54:04