Postgres에 시간대 저장
Postgres에는 내부적으로 Postgres에서 사용하는 시간대 목록이 있는
pg_timezone_names
라는 시스템 보기가 있습니다. 이 보기를 사용하여 사용자가 시간대를 선택할 수 있는 드롭다운 또는 기타 입력 유형을 생성할 수 있습니다. 이 목록은 기본적으로 상당히 크기 때문에 쿼리에서 일부 시간대(예: "posix/"로 시작하는 모든 시간대)를 필터링할 수 있습니다.select name from pg_timezone_names where name not like 'posix%' and name not ilike 'system%' order by name;
이제 사용자의 선택을 저장하는 가장 좋은 방법을 찾아야 합니다. 사용자 테이블에 시간대를 저장하기 위해 열을 추가하여 이를 수행할 수 있습니다.
name
의 pg_timezone_names
값만 저장하기 때문에 열은 텍스트 유형입니다.alter table users add column timezone text;
다음으로 우리는 사용자에 대해 가지고 있는 시간대에서 사용자의 이벤트를 쿼리하려고 합니다. 이벤트에 대한
start_time
를 UTCtimestamptz
열로 저장합니다. 이 솔루션은 Postgres의 timezone 기능을 활용합니다. AT TIME ZONE zone
도 작동합니다. 이 쿼리의 마지막join
은 선택 사항이지만 UTC 오프셋을 알아야 하거나 시간대가 DST인 경우에 있습니다.SELECT events.name, timezone(users.timezone, start_time)
FROM events
JOIN users ON events.user_id = users.id
JOIN pg_timezone_names ON users.timezone = pg_timezone_names.name;
이것은 Postgres의 to_timestamp 함수를 사용하여 날짜 형식을 지정하고 응용 프로그램이 날짜 형식을 지정하지 않도록 하여 한 단계 더 나아갈 수 있습니다.
이 기사는 원래 Magistrate에 게시되었습니다. 이 게시물이 마음에 들고 다른 사람들도 읽고 싶다면 그곳으로 가십시오.
Reference
이 문제에 관하여(Postgres에 시간대 저장), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/devinclark/storing-timezones-in-postgres-2kj3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)