2012-08-02 169 views
22

如何將psql的時區設置爲非默認值(US/Central)以外的其他值?以下是我試過到目前爲止:如何設置Postgres 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:我想要它在非交互模式。

+0

更改時區應該使用** SQL **語句'set',而不是通過psql命令(請參閱Richard的回答) – 2012-08-02 14:21:36

回答

16

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的實例)OK,你可以設置該變量在其.bashrc文件(如果在Linux中)

+0

PGTZ爲勝利! – dfrankow 2012-08-02 14:43:41

+1

請注意,您不需要導出它。在bash提示符下運行:PGTZ = US/Eastern psql -c'顯示時區' – dfrankow 2012-08-02 14:44:27

+0

@dfrankow你是完全正確的,我修復了這個問題 – leonbloy 2012-08-02 14:54:53

23
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" 
+0

是的,我可以在交互模式下執行此操作,但我想要非交互式,即用-c運行。 – dfrankow 2012-08-02 14:41:44

+0

理查德,它適用於臨時,當我關閉SQL窗格,然後它回到舊的,你能提供永久的解決方案 – 2016-03-02 05:22:24

+0

@chintan,這是一個單獨的問題,但你可以使用「ALTER USER」或「ALTER DATABASE 「永久設置配置。 – 2016-03-02 18:56:43

12

ALTER USER的Postgres SET timezone ='亞洲/東京';

+1

這對Amazon RDS有效,無需重新啓動。謝謝! – 2016-05-29 06:09:49

+0

不客氣! – 2017-03-01 02:48:54

0

注意許多第三方客戶端都擁有覆蓋任何Postgres服務器和\或會話設置的自己的時區設置。

E.g.如果您正在使用「的IntelliJ IDEA 2017.3」(或DataGrips),你應該定義時區爲:

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

,否則你將看到「UTC」儘管任何您已設置其他地方的。