[postgresql] enum type 변경
Postgresql에서 테이블 구성 시 Enum type을 정의하고 내용을 정의한다.
필자의 경우 python flask + postgresql + sqlalchemy를 함께 사용하는데
value_type = db.Column(
Enum('int', 'float', 'bool', 'string', name='constants_value_type'),
nullable=False
)
다음과 같이 enum type을 정의할 때가 있다. 여기서 constants_value_type이 Enum type name이 되는데
문제는 내가 여기 enum에 double 이라는 type을 추가하고 싶을 때 일어난다.
나는 분명히 데이터를 추가하고 재시작 했음에도 불구하고 실제 데이터 베이스에는 적용이 되지 않는 현상이 일어나는 것이다.
그 이유는 postgresql 내부에 pg_enum이라는 테이블이 있는데 그 곳에 처음 실행 시 Enum type이 저장이 되기 때문이다.
그래서 코드상으로는 타입이 추가가 되어도 테이블에 추가가 되지 않기 때문에 그런 현상이 일어나는 것이다.
방법은 두 가지가 있다.
첫번째는 postgresql UI 프로그램을 통해서 직접 그 값을 추가시키거나 바꿔주는 것이다. 그런데 이것은 가끔 권한문제를 일으킬 수도 있고
여러모로 어려움이 많다.
그래서 그 때 쓸 수 있는 것이 바로
drop type constants_value_type cascade;
라는 명령어를 터미널에서 psql 로 들어가서 쿼리문을 실행 해주는 것이다.
그 후에 새로 시작을 하면 내가 작성한 Enum이 적용된다는 것을 알 수 있다.