728x90
반응형
PostgreSQL의 Docker 이미지에선 처음 디비를 빌드할 때
/docker-entrypoint-initdb.d/init.sql
위 경로의 sql 스크립트를 실행한다. .env 파일은 아래와 같다.
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
docker-compose.yaml 파일은 아래와 같다.
postgresql-default:
image: postgres:latest
container_name: postgres-default
ports:
- "5432:5432"
env_file:
- .env
volumes:
- ./postgres/default/data:/var/lib/postgresql/data
- ./postgres/default/init.sql:/docker-entrypoint-initdb.d/init.sql
postgresql-source:
image: postgres:latest
restart: always
container_name: postgres-source
ports:
- "5433:5432"
env_file:
- .env
volumes:
- ./postgres/source/data:/var/lib/postgresql/data
- ./postgres/source/init.sql:/docker-entrypoint-initdb.d/init.sql
postgresql-target:
image: postgres:latest
restart: always
container_name: postgres-target
ports:
- "5434:5432"
env_file:
- .env
volumes:
- ./postgres/target/data:/var/lib/postgresql/data
- ./postgres/target/init.sql:/docker-entrypoint-initdb.d/init.sql
init.sql파일의 경우엔 아래와 같다.
\c postgres
CREATE TABLE post (
id SERIAL PRIMARY KEY,
title VARCHAR(100) NOT NULL,
content TEXT NOT NULL,
author VARCHAR(100) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE comment (
id SERIAL PRIMARY KEY,
post_id INTEGER,
content TEXT NOT NULL,
author VARCHAR(100) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (post_id) REFERENCES post (id)
);
나의 경우엔 3개의 DB를 사용해서 3개를 넣었지만 그럴 필요는 없다. 실제로 실행되는 화면을 Docker Desktop에서 보면
디비 소켓에 연결 된 후 초기화 서버가 시작되면서 해당 스크립트가 실행되고 다시 종료되는 것을 볼 수 있다.
주의점
디비를 처음 생성할 때만 실행 되므로 이전 디비 볼륨이 남아 있으면 실행되지 않는다. PostgreSQL의 Docker를 아에 처음 실행할 때 만 같이 실행 된다는 점을 유의해야 한다.
728x90
반응형
'Database > PostgreSQL' 카테고리의 다른 글
PostgreSQL 세션 정보 확인, 종료 (0) | 2024.03.19 |
---|---|
Postgresql 데이터베이스 안의 모든 테이블 삭제 (0) | 2024.03.13 |
[PostgreSQL] 월별로 DB 파티셔닝 예제 (0) | 2023.06.12 |