본문 바로가기

Tech/Postgresql

Docker로 Postgresql 실행 시, 데이터베이스 자동 생성하기

TODO.
Postgresql의 기본이미지를 Docker로 실행하는데, 이때 특정 DB를 생성하려고 한다.


 

Postgresql을 실행할 때, 동작할 init.sql을 생성해준다.

  • init.sql
  CREATE DATABASE kcs_file;

 


참고: 삽질...
  DO $$
  BEGIN
    IF NOT EXISTS(SELECT * FROM pg_database WHERE datname='<확인하고자 하는 DB명>') THEN
      CREATE DATABASE <생성할 DB명>;
    END IF;
  END;
  $$ LANGUAGE PLPGSQL;

 

DB가 존재하는 경우, 존재하지 않는 경우를 따져 생성하려고 위 처럼 만들었는데,

CREATE DATABASE cannot be executed from a function or multi-command string에러가 발생한다.

에러 관련 검색해보니 Postgresql은 트랜잭션 내에서 데이터베이스를 생성 할 수 없다고 한다.

 


 

 

Base Image를 다시 만든다.

  • Dockerfile
  FROM postgres:<원하는 Version Tag>

  COPY <특정 경로>/init.sql /docker-entrypoint-initdb.d/
  • 이후 이미지를 빌드한다.

Docker compose에서 볼륨을 통하여 Data를 저장하고 관리한다

Postgresql 구조 참고

: http://www.gurubee.net/lecture/2917

 

  • docker-compose.yml
  services:
    postgresql:
      image: <새로 생성한 Postgresql 이미지>
      container_name: postgresql
      ports:
        - "5432:5432"
      volumes:
        - /data/pg-data:/var/lib/postgresql/data
  • 이후 docker compose up 시, Postgresql 실행과 동시에 생성하고자 하는 Database가 만들어짐을 확인할 수 있다.
반응형

'Tech > Postgresql' 카테고리의 다른 글

[Postgresql] pg_dumpall 활용 경험  (0) 2022.04.12
Postgresql 리스트 데이터 넣기  (0) 2021.04.27