programing

Postgres 9.3에서 현재 표준 시간대 이름을 가져오려면 어떻게 해야 합니까?

goodsources 2023. 5. 21. 11:22
반응형

Postgres 9.3에서 현재 표준 시간대 이름을 가져오려면 어떻게 해야 합니까?

현재 시간대 이름을 알고 싶습니다.제가 이미 달성한 것은utc_offset시간대 약어는 다음을 사용합니다.

SELECT * FROM pg_timezone_names WHERE abbrev = current_setting('TIMEZONE')

이 에 대한 모든 한 대륙/수도 조합은 표시되지 .timezone예를 들어 다음과 같은 정보를 얻을 수 있습니다.

Europe/Amsterdam
Europe/Berlin

서버가 다음 위치에 있습니다.Berlin그리고 서버의 시간대 이름을 알고 싶습니다.

내가 가지고 있는 문제는CET언제나 그렇다는 것은UTC+01:00그리고 설명하지 않습니다.DST iirc.

가장 일반적인 경우에는 PostgreSQL만 사용하는 것은 불가능하다고 생각합니다.Postgre 설치 시SQL, 시간대를 선택합니다.기본값은 운영 체제의 표준 시간대를 사용하는 것입니다.이 값은 일반적으로 postgresql.conf에 매개 변수 "시간대"의 값으로 반영됩니다.그러나 값은 "현지 시간"으로 끝납니다.이 설정은 SQL 문으로 확인할 수 있습니다.

show timezone;

를 "/Berlin같은 하면 "postgresql.conf"와 같은 시간대가 됩니다.show timezone;로컬 시간 대신 해당 값을 반환합니다.

따라서 귀사의 솔루션에는 postgresql.conf의 "시간대"를 기본 "로컬 시간"이 아닌 명시적인 값으로 설정하는 작업이 포함될 것으로 생각됩니다.

Postgresql 9.5에서 잘 작동하는 것 같습니다.

SELECT current_setting('TIMEZONE');

이렇게 하면 문제를 해결하는 데 도움이 될 수도 있고 도움이 되지 않을 수도 있지만, 현재 서버의 표준 시간대를 UTC(기술적으로는 UT1)와 비교하려면 다음을 수행합니다.

SELECT EXTRACT(TIMEZONE FROM now())/3600.0;

위에서는 UT1 상대 오프셋을 분 단위로 추출한 다음 3600초/시간 계수를 사용하여 시간으로 변환하여 작동합니다.

예:

SET SESSION timezone TO 'Asia/Kabul';
SELECT EXTRACT(TIMEZONE FROM now())/3600.0;
-- output: 4.5 (as of the writing of this post)

(계속).

다음 스크립트를 사용하여 표준 시간대에 액세스할 수 있습니다.

SELECT * FROM pg_timezone_names WHERE name = current_setting('TIMEZONE');
  • current_설정('TIMEZONE')은 설정에 대한 대륙 / 자본 정보를 제공합니다.
  • pg_timezone_names 보기 pg_timezone_names는 SET TIMEZONE에서 인식되는 표준 시간대 이름의 목록과 관련 약어, UTC 오프셋 및 일광 절약 상태를 제공합니다.
  • 보기의 name 열(pg_timezone_names)은 시간대 이름입니다.

출력은 다음과 같습니다.

name- Europe/Berlin, 
abbrev - CET, 
utc_offset- 01:00:00, 
is_dst- false

다음 답변 참조: 소스

시간대가 postgresql.conf 또는 서버 명령줄 옵션으로 지정되지 않은 경우, 서버는 TZ 환경 변수 값을 기본 시간대로 사용하려고 시도합니다.TZ가 정의되지 않았거나 Postgre에 알려진 시간대 이름이 없는 경우SQL, 서버는 C 라이브러리 함수 localtime()의 동작을 확인하여 운영 체제의 기본 표준 시간대를 결정하려고 합니다.기본 표준 시간대가 Postgre 중에서 가장 가까운 일치로 선택되었습니다.SQL의 알려진 시간대입니다.이 규칙은 지정되지 않은 경우 log_timezone의 기본값을 선택하는 데도 사용됩니다.

즉, 표준 시간대를 정의하지 않은 경우 서버는 C 라이브러리 함수 localtime()의 동작을 확인하여 운영 체제의 기본 표준 시간대를 결정하려고 시도합니다.

시간대가 postgresql.conf 또는 서버 명령줄 옵션으로 지정되지 않은 경우, 서버는 TZ 환경 변수 값을 기본 시간대로 사용하려고 시도합니다.

실제로 시스템의 시간대를 설정할 수 있는 것 같습니다.

셸에서 OS 로컬 표준 시간대를 가져옵니다.psql에서:

=> \! date +%Z

언급URL : https://stackoverflow.com/questions/28216923/how-do-i-get-the-current-timezone-name-in-postgres-9-3

반응형