2013-02-20 3 views
0

모든 타임 스탬프 열이 중앙 표준 시간대에 있도록 중앙 표준 시간대의 서버에 설치된 postgres db를 설정했습니다.Postgres 데이터베이스를 CST에서 GMT로 변환하는 방법은 무엇입니까?

데이터베이스의 모든 시간대 열을 CST에서 GMT로 변경하는 방법은 포스트 그레스에 있습니까? GMT를 사용하도록 데이터베이스를 구성하는 것이 가장 좋은 방법입니까?

+0

'postgresql.conf'에는 시간대 설정이 있습니다. 그래서 다음과 같이 할 수 있습니다.'timezone = 'GMT'. – fbynite

답변

1

음, 가장 좋은 방법은 시간대에 대해 아무것도 모르는 항상 (TIMESTAMP WITH TIME ZONE의 줄임말) TIMESTAMPTZ를 사용하도록 타임 스탬프를 저장하기 위해 입력 TIMESTAMP 유형을 사용하지 않도록하는 것입니다.

TIMESTAMPTZ 저장 소인 원래 (같은 CST, 또는 GMT+6)에 기록 된 모두의 UTC 소인 및 시간대. 따라서 현재 서버 나 클라이언트의 시간대 설정이 무엇이든 관계없이 항상이 열을 올바르게 조작하고 표시 할 수 있습니다.

당신은 같은 것을 사용 TIMESTAMPTZ로 기존 TIMESTAMP 열을 변환 할 수 있어야한다 :이 일을하기 전에

ALTER TABLE mytable ALTER COLUMN old_tstamp TYPE TIMESTAMPTZ 

을, 당신은 TIMESTAMPTZ에 TIMESTAMP의 변환이 얼마나 작은 데이터 세트 또는 어쩌면 작은 테스트 테이블에 실험한다 시간대 정보가 데이터에 보존되도록 실제로 작업합니다. 현재 세션의 변환이 제대로 작동하지 않는 경우

, 일시적으로 설정할 수 있습니다 시간대 (만 변환을 위해 필요) (ALTER TABLE ... COLUMN ... TYPE 전에 사용) 같은 문을 사용 :

SET timezone TO 'CST6CDT'; 

또는

SET timezone TO 'UTC+6'; 

이 작업은 후속 작업과 TIMESTAMP에서 TIMESTAMPTZ으로의 변환에 영향을줍니다. 올바르게 처리해야합니다.

모든 타임 스탬프를 TIMESTAMPTZ으로 변환하면 서버 또는 클라이언트 시간대 설정 (기본값은 현재 운영 체제 시간대 설정)은 데이터 조작이 항상 정확하기 때문에 표시 목적으로 만 유용합니다.

+0

내 모든 시간은 실제로 이미 시간대로 생성되었으며 도메인을 사용하여 생성했으며 실제로 시간대가있는 시간 항목의 미세한 부분을 이해하지 못했습니다. 내가 서버에서 시간을 변경하는 것 외에 다른 것을 할 수없는 것처럼 보입니다. – ams

+0

"TIMESTAMPTZ는 UTC의 타임 스탬프와 타임 스탬프가 원래 기록 된 시간대 (CST, PST 또는 GMT + 6)를 모두 저장합니다." - "시간대가있는 타임 스탬프의 경우 내부적으로 저장되는 값은 항상 UTC"[ "8.5.1.3, 타임 스탬프"]입니다 (http://www.postgresql.org/docs/current/static/datatype- datetime.html # AEN5739). –

관련 문제