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 구조 참고
- 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 |