postgres 기본 시간대


99

내가 설치 PostgreSQL 9했고 그것이 보여주는 시간은 서버 시간보다 1 시간 늦습니다.

러닝 Select NOW()쇼 :2011-07-12 11:51:50.453842+00

서버 날짜는 다음을 표시합니다. Tue Jul 12 12:51:40 BST 2011

1 시간 늦었지만에 표시된 시간대 phppgadmin는 다음과 같습니다.TimeZone Etc/GMT0

나는 postgresql.conf및 설정에 들어 가려고 시도했습니다.

시간대 = GMT

그런 다음 다시 시작하지만 변경 사항은 없습니다.

서버 시간대를 사용했을 것이라고 생각했지만 분명히 그렇지 않은 아이디어가 있습니까?!

해결책! : GMT이전으로 설정했고 한 시간 뒤였습니다. 주변을 검색 한 후로 설정해야한다는 것이 밝혀졌습니다 Europe/London. 이것은 영국 서머 타임의 +1 시간을 고려하지만 GMT는 그렇지 않습니다!

답변:


113

시간대는 세션 매개 변수입니다. 따라서 현재 세션의 시간대를 변경할 수 있습니다.

문서를 참조하십시오 .

set timezone TO 'GMT';

또는 SQL 표준에 더 가깝게 따라 SET TIME ZONE명령을 사용하십시오 . 위의 코드에서 "timezone"이라는 단어를 사용하는 "TIME ZONE"에 대한 두 단어에 유의하십시오.

SET TIME ZONE 'UTC';

문서는 차이점을 설명합니다.

SET TIME ZONE은 SQL 표준에 정의 된 구문을 확장합니다. 표준은 숫자 시간대 오프셋 만 허용하는 반면 PostgreSQL은보다 유연한 시간대 지정을 허용합니다. 다른 모든 SET 기능은 PostgreSQL 확장입니다.


2
나는 그것을 설정하려고 시도했지만 작동하지 않는 것 같았으며 활성 세션에만 설정하지 않았습니다. 내가 phpMyAdmin을 쉽게 이런 짓을하지만, PostgreSQL을 위해 그것을 할 수있는 방법을 찾을 수가 어차피 모든 데이터베이스 요법에 대한 영구적으로 변경하려면
블루 타워

yup 'set timezone To ..'는 현재 세션의 시간대 만 설정하며 Postgresql.conf에서 시간대 구성 매개 변수를 변경하면 모든 데이터베이스의 시간대를 변경해야합니다.
Muhammad Usama 2011

4
postgresql.conf에서 시간대를 GMT로 변경해 보았는데 제대로 작동하는 것 같습니다.
Muhammad Usama 2011

더 많은 표준 (SQL 사양 준수)은 "TIME ZONE"에 대한 두 단어입니다 SET TIME ZONE 'UTC';.. 문서를 참조하십시오 .
Basil Bourque 2014

102

다음 중에서 선택하십시오 timezone.

SELECT * FROM pg_timezone_names;

그리고 set아래 주어진 예 와 같이 :

ALTER DATABASE postgres SET timezone TO 'Europe/Berlin';

postgres위의 문장 대신 DB 이름을 사용하십시오 .


4
이 작업이 완료 후에는 PostgreSQL의 서비스를 다시 시작해야
조이 핀토을

24
@JoeyPinto가 사실이 아닙니다. 발행하기에 충분합니다. SELECT pg_reload_conf();:)
Alphaaa

4
나는 내 데이터베이스 이름으로 문을 실행하고 SELECT pg_reload_conf()진정한 돌아 왔지만 now()select current_setting('TIMEZONE')'미국 / 뉴욕'에 대한 값을 반환하는 것을 계속한다. 내가 수퍼 유저가 아니기 때문입니까?
물 자체

48

Postgres 9.1에서 시간대 변경을 완료하려면 다음을 수행해야합니다.

1.- /usr/share/postgresql/9.1/의 "timezones"폴더에서 적절한 파일을 검색합니다. 제 경우에는 "America.txt"가 될 것입니다. 여기에서 해당 영역에서 가장 가까운 위치를 검색하고 왼쪽 열의 첫 글자.

예 : "뉴욕"또는 "파나마"에있는 경우 "EST"가됩니다.

#  - EST: Eastern Standard Time (Australia)
EST    -18000    # Eastern Standard Time (America)
                 #     (America/New_York)
                 #     (America/Panama)

2.-postgresql.conf 파일 에서 "시간대"줄의 주석 처리를 제거하고 다음과 같이 시간대를 입력합니다.

#intervalstyle = 'postgres'
#timezone = '(defaults to server environment setting)'
timezone = 'EST'
#timezone_abbreviations = 'EST'     # Select the set of available time zone
                                        # abbreviations.  Currently, there are
                                        #   Default
                                        #   Australia

3.- Postgres 다시 시작


3
이것은 현재 사용자뿐만 아니라 PGSQL의 모든 프로세스에 대해 TZ 변경 기본값을 만들기 때문에 실제로 정답입니다.
jfreak53

15
3 ~ 4 개의 문자 코드를 모두 피하는 것이 좋습니다 . 표준화되거나 고유하지 않습니다. 대신 적절한 시간대 이름 (대륙 SLASH 도시 또는 지역)을 사용하십시오. 자신의 예를 사용하기 위해 파나마는 −05:00연중 오프셋을 사용하고 뉴욕은 일광 절약 시간 (DST)으로 한 시간을 이동합니다. 시간대는 오프셋 이상입니다. 시간대에는 과거, 현재 및 미래의 규칙 및 DST와 같은 이상이 포함됩니다. 그래서, 당신이 무슨 뜻인지 말 : America/Panama, America/New_York, Europe/London, UTC(나 Zulu).
Basil Bourque 2015

3
당으로 PostGRE 워드 프로세서 , 당신이 수행하여 특정 데이터베이스의 인식 시간대 이름의 목록을 얻을 내부 뷰를 확인할 수 있습니다 SELECT * FROM pg_timezone_names할 아마도 안전하다, 주어진 제 3 자 사이트는 반드시 최신으로되지 않습니다 (또는 오래된) 자신의 특정 데이터베이스 인스턴스로.
SeldomNeedy

나는 주에 해당 폴더가 없습니다postgresql
SuperUberDuper

PostgreSQL을 다시 시작하는 대신 select pg_reload_conf().
ANeves

42

허용 대답 하여 무하마드 오사마은 올바른 것입니다.

구성 매개 변수 이름

이 답변은 다음을 사용하여 Postgres 관련 구성 매개 변수를 설정하는 방법을 보여줍니다.

SET timezone TO 'UTC';

timezoneSQL 명령이 아닌 구성 매개 변수의 이름입니다.

이것에 대한 문서를 참조하십시오 .

표준 SQL 명령

또는 SQL 사양에 정의 된 SQL 명령을 사용할 수 있습니다 SET TIME ZONE.. 이 구문에서 단어 쌍은 TIME ZONE"시간대"(실제 SQL 명령 대 매개 변수 이름)를 대체하며 "TO"는 없습니다.

SET TIME ZONE 'UTC';

이 명령과 위의 명령은 모두 현재 세션에 대해서만 값을 설정하는 동일한 효과를 갖습니다. 변경 사항을 영구적으로 적용하려면이 형제 답변을 참조하십시오 .

이것에 대한 문서를 참조하십시오 .

시간대 이름

적절한 시간대 이름을 지정할 수 있습니다 . 대부분은 대륙 / 지역입니다.

SET TIME ZONE 'Africa/Casablanca';

…또는…

SET TIME ZONE 'America/Montreal';

3 또는 4 편지 피 같은 약어 EST또는 IST그들이 어느 쪽도 표준화되지도 독특한 같다. 시간대 이름 목록은 Wikipedia를 참조하십시오 .

현재 영역 가져 오기

세션의 현재 시간대를 보려면 다음 명령문 중 하나를 시도하십시오. 기술적으로 우리는 SHOW런타임 매개 변수를 표시하는 명령을 호출합니다 .

SHOW timezone ;

…또는…

SHOW time zone ;

미국 / 태평양


4
제공하는 유일한 해답 인에 대한 보너스 포인트 SHOW부분
아리엘 알론을

알았다, Ariel Allon-그리고 그 시간대를 변수로 선택하려는 다음 사람을 위해 ...SELECT current_setting('TIMEZONE')
Wellspring

10

이전 답변 외에도 pgAdmin III 도구를 사용하면 다음과 같이 시간대를 설정할 수 있습니다.

  1. 도구> 서버 구성> postgresql.conf 를 통해 Postgres 구성을 엽니 다.
  2. 입력 시간대를 찾아 두 번 클릭하여 엽니 다.
  3. 가치 변경
  4. 서버를 다시로드하여 구성 변경 사항을 적용합니다 (상단 또는 서비스를 통해 재생 버튼).

pgAdmin III의 Postgres 구성


3

많은 타사 클라이언트에는 Postgres 서버 및 / 또는 세션 설정과 겹치는 자체 시간대 설정이 있습니다.

예를 들어 'IntelliJ IDEA 2017.3'(또는 DataGrips)을 사용하는 경우 시간대를 다음과 같이 정의해야합니다.

'DB 소스 속성'-> '고급'탭-> 'VM 옵션': -Duser.timezone = UTC + 06 : 00

그렇지 않으면 다른 곳에서 설정 한 내용에도 불구하고 'UTC'가 표시됩니다.


그래서 이것은 여름 / 겨울 시간 변화와 동기화를 유지해야합니까?
Cpt. Senkfuss nov.

1
@ Cpt.Senkfuss, 나는 -Duser.timezone = Australia / Tasmania와 같은 것도 작동하고 여름 / 겨울 변화를 처리해야한다고 믿습니다.
ARA1307

이것은 생명의 은인 트릭입니다. 나는 지금까지 3 시간 동안 잘못된 것이 무엇인지 이해하려고 노력하고 있습니다. :) btw, 전체 시간대 이름을 시도했으며 작동합니다. 나에게는 -Duser.timezone = Europe / Istanbul
Kaya

0

질문과 관련이 없을 수도 있지만 CST를 사용하고 시스템 시간대를 원하는 tz (America / ...)로 설정 한 다음 postgresql conf에서 시간대 값을 'localtime'으로 설정하고 매력으로 작동했습니다. , current_time 적절한 시간 인쇄 (Ubuntu 16의 Postgresql 9.5)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.