27

如何将 psql 的时区设置为默认值(美国/中部)以外的时区?这是我到目前为止所尝试的:

$ psql
psql (9.1.4, server 9.0.4)
...

$ psql -c 'show timezone'
  TimeZone  
------------
 US/Central

$ psql --set=timezone=US/Eastern -c 'show timezone'
  TimeZone  
------------
 US/Central

$ psql --variable=timezone=US/Eastern -c 'show timezone'
  TimeZone  
------------
 US/Central

编辑:我不想更改服务器时区,只是客户端。

编辑#2:我希望它处于非交互模式。

4

4 回答 4

28
psql (9.1.4)
Type "help" for help.

richardh=> show timezone;
 TimeZone 
----------
 GB
(1 row)

richardh=> set timezone='UTC';
SET
richardh=> show timezone;
 TimeZone 
----------
 UTC
(1 row)

richardh=> set timezone='US/Eastern';
SET
richardh=> show timezone;
  TimeZone  
------------
 US/Eastern
(1 row)

richardh=> set timezone='blah';
ERROR:  invalid value for parameter "TimeZone": "blah"
于 2012-08-02T14:20:04.063 回答
21
ALTER USER postgres SET timezone='Asia/Tokyo' ;
于 2016-05-20T06:19:22.427 回答
20

psql文档说:

-v assignment
--set=assignment
--variable=assignment
Perform a variable assignment, like the \set internal command. Note that 
you must separate name and value, if any, by an equal sign on the command line....

但是对于时区,它似乎不起作用,也许是因为:

 These assignments are done during a very early stage of start-up, 
 so variables reserved for internal purposes might get overwritten later.

因此,您似乎必须在 psql 中使用 SET 命令,或者设置PGTZ环境变量:

PGTZ=PST8PDT psql -c 'show timezone'

当然,如果您可以为用户全局设置时区(不仅仅是这个单独的 psql 实例),您可以在其.bashrc文件中设置该变量(如果在 Linux 中)

于 2012-08-02T14:29:31.973 回答
0

请注意,许多第三方客户端都有自己的时区设置,与任何 Postgres 服务器和/或会话设置重叠。

例如,如果您使用“IntelliJ IDEA 2017.3”(或 DataGrips),则应将时区定义为:

'DB source properties' -> 'Advanced' tab -> 'VM Options': -Duser.timezone=UTC+06:00

否则,无论您在其他任何地方设置了什么,您都会看到“UTC”。

于 2018-01-09T18:53:22.423 回答