[PostgreSQL] PostgreSQL 시간 설정

목적

  • PostgreSQL Docker 로 실행하게 되면, Database 내에 시간과 실제 서버 시간이 맞지 않는 부분이 있습니다.
  • 때문에, PostgreSQL 컨테이너 시간을 맞춰주는 작업을 진행해야 합니다.
  • TIME ZONE을 Asiz/Seoul 로 변경하는 방법에 대해서 정리 진행합니다.

docker-compose.yml 파일 작성

  • PostgreSQL Docker 컨테이너를 docker compose 로 관리하기 위해서 docker-compose.yml 파일을 다음과 같이 작성 하였습니다.
version: '3.4'

services:
    postgres:
        image: postgres-db
        container_name: postgres
        environment:
            - POSTGRES_USER=test
            - POSTGRES_PASSWORD=system
            - POSTGRES_DB=adc 
            - TIMEZONE=Asia/Seoul
        ports:
            - '5432:5432'
        volumes:
            - D:/postgresql/data/:/var/lib/postgresql/data
  • 위 docker-compose.yml 파일을 실행하려면 해당 경로로 가서 docker-compose up 명령어를 통해 컨테이너를 실행하면 됩니다.

PostgreSQL 컨테이너 시간 확인

  • postgreSQL 컨테이너가 실행된 후, PostgreSQL 컨테이너 bash 로 접속 후 psql 명령어를 통해 현재 PostgreSQL 컨테이너의 시간이 어느 시간 기준으로 되어 있는지 확인합니다.

1. postgres 컨테이너 bash 접속

  • postgres 컨테이너 bash 로 접속 합니다.
  • 아래 명령어를 통해 bash 로 접근할 수 있습니다.
> docker exec -it postgres bash

2. psql 명령어로 PostgreSQL 접속

  • psql 명령어를 통해서 PostgreSQL 에 접속합니다.
  • PostgreSQL 접속하는 명령어는 다음과 같습니다.
root@c1141990c8f7:/# psql -d {데이터베이스 이름} -p {포트정보} -h {호스트IP} -U {사용자계정}
  • 위와 같이 명령어를 입력 후, 정상적으로 접속이 되었다면 아래와 같이 출력됩니다.
root@c1141990c8f7:/# psql -d postgres -p 5432 -h 127.0.0.1 -U mirero
psql (14.3 (Debian 14.3-1.pgdg110+1))
Type "help" for help.

postgres=#

3. 현재 PostgreSQL 시간 정보 확인

  • 다음 쿼리문을 통해 PostgreSQL 시간 정보를 확인할 수 있습니다.
SELECT CURRENT_SETTING('TIMEZONE'), NOW(), CURRENT_TIMESTAMP, clock_timestamp();
  • 확인 결과, 현재 TimeZone 은 Etc/UTC 시간 기준으로 설정되어 있는 것을 확인할 수 있습니다.
postgres=# SELECT CURRENT_SETTING('TIMEZONE'), NOW(), CURRENT_TIMESTAMP, clock_timestamp();
 current_setting |              now              |       current_timestamp       |        clock_timestamp
-----------------+-------------------------------+-------------------------------+-------------------------------
 Etc/UTC         | 2022-06-21 08:23:37.175958+00 | 2022-06-21 08:23:37.175958+00 | 2022-06-21 08:23:37.186102+00
(1 row)
  • 위 시간을 Asia/Seoul 시간으로 변경하도록 하겠습니다.

4. TimeZone 확인

  • 다음 쿼리문을 통해 TimeZone 을 확인할 수 있습니다.
SHOW timezone;
postgres=# SHOW timezone;
 TimeZone
----------
 Etc/UTC
(1 row)

5. TimeZone 변경

  • 이제 TimeZone 을 Etc/UTC 에서 Asia/Seoul 로 변경하도록 하겠습니다.
  • TimeZone 변경하는 명령어는 아래와 같습니다.
SET TIME ZONE 'Asia/Seoul';
postgres=# SELECT CURRENT_SETTING('TIMEZONE'), NOW(), CURRENT_TIMESTAMP, clock_timestamp();
 current_setting |              now              |       current_timestamp       |       clock_timestamp
-----------------+-------------------------------+-------------------------------+------------------------------
 Asia/Seoul      | 2022-06-21 17:24:10.406169+09 | 2022-06-21 17:24:10.406169+09 | 2022-06-21 17:24:10.40628+09
(1 row)
  • 조회 결과, Asia/Seoul 로 TimeZone 이 정상적으로 변경된 것을 확인할 수 있습니다.
728x90

이 글을 공유하기

댓글

Designed by JB FACTORY