[postgresql] postgres 기본 시간대

내가 설치 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는 그렇지 않습니다!



답변

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

문서를 참조하십시오 .

set timezone TO 'GMT';

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

SET TIME ZONE 'UTC';

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

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


답변

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

SELECT * FROM pg_timezone_names;

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

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

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


답변

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 다시 시작


답변

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

구성 매개 변수 이름

이 답변은 다음을 사용하여 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 ;

미국 / 태평양


답변

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

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

pgAdmin III의 Postgres 구성


답변

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

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

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

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


답변

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