2016-08-03 1 views
0

postgresql 데이터베이스 마이그레이션 프로젝트에 oracle을 사용하고 있습니다. 포스트그레스에서 운영 체제 날짜와 시간을 읽어야합니다. 오라클에서 sysdate()는 날짜 유형 데이터의 시스템 날짜 시간을 반환하고 systimestamp()는 time_zone 변수 설정에 관계없이 시간 기록 유형 데이터를 반환합니다. 그러나 postgres에서 current_date() 및 current_timestamp()는 항상 해당 데이터베이스에 설정된 timezone 변수를 기준으로 결과를 제공합니다. 시간대 변수 동기화 (예 : set timezone = 'utc')는 한 가지 방법이지만 시간대 변수를 변경하지 않으려합니다.오라클의 systimestamp()와 같은 포스트 그레스에 동등한 기능이 있습니까

내가 얻고 싶은 것은 오라클과 같은 시스템 (시간대가 포함되거나 포함되지 않을 수 있음)의 현재 날짜와 시간입니다. 어떤 pl/pgsql이 도움이 될 것입니다. 감사합니다

+1

https://www.postgresql.org/docs/9.5/static/functions-datetime.html 선택하십시오 ... BTW : 타임 스탬프는 현재 시간대에 없습니다 *, 모든 타임 스탬프는 UTC로되어 있지만 그것에 tz가 덧붙여진다. 따라서 이것은 표시/날짜 형식이 아닌 문제 일 수 있습니다. – wildplasser

+0

['set local time zone local'] (https://www.postgresql.org/docs/current/static/sql-set.html)이 PostgreSQL에서 가장 가까운 주소입니다. * 서버의 기본값을 설정합니다 시간대 값; 이것이 명시 적으로 설정되지 않은 경우 서버의 운영 체제가 *로 기본 설정되는 영역이됩니다. 또한 커밋/롤백 후에 재설정되거나 함수에서 사용하는 경우 재설정됩니다. 함수가 실행됩니다. – pozs

답변

0

데이터 유형 TIMESTAMP WITH TIME ZONE은 Oracle과 PostgreSQL에서 다릅니다.
오라클은 타임 스탬프와 함께 타임 스탬프를 저장하지만 PostgreSQL은 타임 스탬프를 UTC로 저장하고 현재 설정된 시간대 (SQL 문 SHOW TimeZone에서 사용 가능)에 표시합니다.

그래서 함수는 PostgreSQL과 Oracle에서 같은 시간을 반환하지만 다른 방식으로 표시됩니다. 그것은 정상적으로 아무 문제도 없어야합니다.

시간대 정보를 시간 소인과 함께 저장해야하는 경우 별도의 필드를 사용하여 표준 시간대 정보를 저장해야합니다. 그런 다음 AT TIME ZONE을 사용하여 타임 스탬프를 표시 할 시간대로 변환 할 수 있습니다.

관련 문제