내 postgresql.conf 파일에서 내 기본 시간대는 '유럽/런던'으로 설정됩니다. DST를가 월 30 일 10 월 꺼집니다 때문에 왜 Postgres는 내 DST를 인식하지 못합니까?
,이 의미 지금 (10월 4일 내가 쓰고있는 동안) '유럽/런던' should correspond '01'과 함께.나는열이 timestamp with timezone
유형 인 테이블을 가지고 있습니다. (전통적으로 그리니치 표준시, GMT로 알려진 표준시) timestamp with timezone
를 들어
는, 내부적으로 저장된 값은 UTC 항상 :
Postgres specs 상태입니다. 명시 적 시간대가 지정된 입력 값은 해당 시간대의 해당 오프셋을 사용하여 UTC로 변환됩니다. 입력 문자열에 시간대가 없다면 시스템의 TimeZone 매개 변수에 지정된 시간대로 간주되며 시간대 영역의 오프셋을 사용하여 UTC로 변환됩니다. 나는이 삽입 할 경우 굵은 문장으로
는 :
INSERT INTO dummy VALUES ('2016-12-25 12:00:00.000')
을 나는 이렇게 '2016-12-25 12:00:00.000+01'
하는 '유럽/런던 시간대로 해석 될 전망이다.
따라서 검색 할 때 해당 값이 표시 될 것으로 예상됩니다 (또는 최소한 '2016-12-25 11:00:00.000+00'
). 내가 쿼리를 할 경우
대신
SELECT * FROM dummy
나는이 반환 오전 :
|time |
|timestamp with time zone|
--------------------------
|2016-12-25 12:00:00+00 |
나는이 행동의 이유를 얻을 수 없습니다. '유럽/런던'시간대의 DST 관리가 잘못 되었습니까? 내가 놓친 게 있니?
다른 표준 시간대로 전환하면 항상 예상대로 작동합니다.
다른 시간대를 사용하려고 했습니까? 방금 SET TIME ZONE 명령을 사용하여 세션 레벨에서 tz를 변경했습니다. –
@DanieleRepici 기대가 완전하지 않다. Postgres는 'timestamptz'2016-12-25 12 : 00 : 00.000 Europe/London '을 '2016-12-25 12 : 00 : 00 + 00' (ie Postgres는 현재 ** 오프셋 **이 아닌 ** 시간대 **를 사용합니다. – pozs
@pozs 그래서 기본적으로이 경우 올바른 오프셋을 추론 할 현재 시간을 고려하지 않는다고 말하고 있습니다. 이 동작이 어딘가에 지정되어 있습니까?따옴표로 묶인 문서에서 대담한 문장에 관해서는, 변환을하기 위해, Postgres는 "ok, 유럽/런던의 표준 시간대에 대한 오프셋은 무엇입니까?"라고 물어야합니다. 실제로 현재 시간에 달려 있습니다. –