일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 42seoul
- uuid-ossp
- 쿠버네티스
- 42서울
- 창업
- GraphQL
- 이노베이션아카데미
- schema first
- 스타트업
- 엣지컴퓨팅
- 텍스트북
- 레이캐스팅
- 어셈블리어
- raycasting
- 자료구조
- adminbro
- psql extension
- 파이썬
- 스플릿키보드
- enable_if
- 프라이빗클라우드
- SFINAE
- mistel키보드
- 부동소수점
- 동료학습
- 도커
- 어셈블리
- Cloud Spanner
- 정렬
- c++
- Today
- Total
written by yechoi
[docker/docker-compose] psql extension 설치(uuid-ossp) 본문
[docker/docker-compose] psql extension 설치(uuid-ossp)
yechoi 2021. 7. 3. 14:32PostgreSQL은 uuid를 자동으로 생성하는 기능이 있습니다.
그리고 TypeORM에서 @PrimaryGeneratedColumn("uuid")
데코레이터를 사용하여 uuid를 primary key로 생성할 수 있습니다.
또한, @PrimaryGeneratedColumn("uuid")
은 자동으로 생성하고 저장해줍니다.
단, 해당 데이터베이스에서 uuid 생성 함수를 호출하기 위해 관련 extension(uuid-ossp
)을 설치해야 합니다.
설치되어 있지 않다면 typeORM 실행시 에러가 발생합니다.
설치
공식 postgres docker image가 제공하는 것 이외에 추가적인 초기화를 하고 싶다면, /docker-entrypoint-initdb.d/
폴더에 있는 스크립트를 넣어두면 됩니다.
엔트리포인트가 디폴트 postgres
유저와 데이터베이스를 생성하기 위해 initdb
를 호출하고 난 뒤, 서비스를 실행하기 이전에 추가적인 초기화를 진행하기 위해서 해당 디렉토리 안의 *.sql
또는 실행가능한 *.sh
스크립트를 실행합니다.
우리가 원하는 extension을 설치하기 위한 .sh
파일을 만들고, 이를 container 내부의 /docker-entrypoint-initdb.d/
디렉토리에 넣어보겠습니다.
1. uuid-ossp
를 설치하는 스크립트를 init_db.sh
를 만듭니다.
- 예시는
uuid-ossp
입니다만, 다른 원하는 익스텐션이 있으면 해당 명칭으로 대체하면 됩니다. $POSTGRES_USER
와$POSTGRES_DB
는 환경설정 파일 또는 environment 옵션으로 설정할 수 있습니다.
#!/bin/bash
set -e
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
GRANT ALL PRIVILEGES ON DATABASE "$POSTGRES_DB" TO "$POSTGRES_USER";
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
EOSQL
2. 컨테이너 내에 /docker-entrypoint-initdb.d/
폴더를 만듭니다. /db/
를 해당 명칭의 볼륨으로 올리는 방식으로 진행합니다.
- docker-compose를 사용하고 있기 때문에 docker-compose 파일을 아래와 같이 설정하겠습니다.
version: '3'
services:
db:
image: postgres
networks:
- database
ports:
- "5432:5432"
env_file:
- ./db/.env
volumes:
- ./db/:/docker-entrypoint-initdb.d
restart: always
container_name: db
잘 설치됐는지 확인하기
1. 컨테이너에 진입: docker exec -it db /bin/bash
- db는 실사용하는 컨테이너 이름으로 바꿔줘야 합니다.
2. 데이터베이스에 진입: psql -U user database
- user는 실사용하는 유저 이름으로 바꿔야 합니다. 여기서 user는
env_file
에 선언된POSTGRES_USER
입니다. - database는 실사용하는 데이터 베이스 이름으로 바꿔야 합니다. 여기서 database는 마찬가지로
env_file
에 선언된POSTGRES_DB
입니다.
3. 사용가능한 익스텐션 확인: select * FROM pg_available_extensions;
아래쪽에 uuid-ossp
가 있습니다.
참고:
공식 문서 - initialization scripts(en/docs).
https://github.com/transcendence42/ft_transcendence/issues/77