장고에서는 DDL을 마이그레이션 파일로 관리한다. 보통 개발팀의 규모가 커지고 DBA가 따로 존재할 경우에는 굳이 신경쓰지 않지만, 소규모의 팀에서 DDL을 관리하기 위해서는 마이그레이션파일을 작성하는 것이 편리하다.
하지만 이 때 일반적인 DDL과 다르게 문제가 되는 것이 CREATE EXTENSION
과 같은 특수한 구문들이다. 이런 구문들은 어떻게 관리해야하는가?
python manage.py makemigrations --name create_extension core --empty
위와 같이 입력한다.
이에 대해 위와 같이 결과가 나왔으면 된다.
이 때 마이그레이션 파일은
# Generated by Django 3.1 on 2021-11-16 16:25
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
]
operations = [
]
위와 같이 텅 비어있을 것이다.
# Generated by Django 3.1 on 2021-11-16 16:25
from django.contrib.postgres.operations import CreateExtension
from django.db import migrations
class Migration(migrations.Migration):
dependencies = []
operations = [
CreateExtension("cube"),
CreateExtension("earthdistance"),
]
이제 이 부분들을 위와 같이 수정해주자. CreateExtension
의 인자로 extension
의 이름을 넣어주면 된다. 이번에는 cube
와 earthdistance
를 사용할 것이라 위와 같이 했다.
그 후 정상적으로 migrate
를 진행하면 된다.
PostgreSQL
상에서 다음과 같은 쿼리를 날려보자.
SELECT *
FROM pg_extension;
이 결과로
위와 같이 두 개의 extension
이 잘 설치된 것을 확인할 수 있다.