postgres enum type을 알아봅시다.

코딩/Sql 2022. 12. 18. 03:15

 postgres에서 enum 타입을 알아봅시다. 예를 들어, 유저 등급을 저장할 때 사용할 수 있습니다.

 


 rate_type을 저장하려고 합니다. rate에는 'bronze', 'silver', 'gold' 등이 있어요. 우리는 type enum을 생성할 건데요. 브론즈, 실버, 골드를 열거한 타입으로 생성할 겁니다. 이런 류는 등급 뿐만이 아니라 파일 타입 등을 저장할 때에도 쓰일 수 있습니다. 타입을 생성하는 CREATE TYPE 명령어를 쓸 건데요. enum으로 생성할 것이니, CREATE TYPE ~ AS ENUM ~ 구문을 써서 생성해 보겠습니다.

 

 위 구문은, 타입 rate_type을 'bronze', 'silver', 'gold'를 열거한 타입으로 선언하는 것입니다.

 

 이제, Data types을 보면 rate_type이 추가되었음을 볼 수 있습니다.

 

 

 속성을 보면, Enum values가 있습니다. 브론즈, 실버, 골드가 순서대로 나옴을 볼 수 있습니다.

 

 

 만약에 요래 생성하면 어떻게 될까요? dbeaver에서는 오류를 뱉어냅니다. 아마도 열거형의 타입이 string과 int로 달라서 그러지 않나 싶습니다.

 


 이제 제가 추가한 enum type을 테스트 해 보겠습니다.

 

 

 제가 타입을 추가했으니, column을 추가할 때, Data type을 rate_type으로 할 수 있어요.

 

 

 테이블을 생성하는 문은 위와 같습니다. "rate_type" type인 rate와, serial4 type인 column1을 생성하는데요. column1을 pk로 잡아주었습니다.

 

 

 이제, "platinum"을 추가해 봅시다.

 

 

 그랬더니, 에러가 떨어집니다. 왜요? 저는 "bronze", "silver", "gold"를 rate_type 열거형으로 생성했기 때문입니다. rate_type에는 "platnium"이 없었다는 것이 핵심입니다.

 

 

 이제, "gold"와 "bronze" 유저를 추가해 봅시다. 위와 같이 추가해 주면 됩니다.

 

 

 그러면 1번 유저는 골드, 2번 유저는 브론즈라는 정보가 추가됩니다.

 

 

 당연하게도, 간단하게 where 절과 같은 filter도 걸어버릴 수 있습니다. 위 예제는 등급이 silver보다 크거나 같은 유저들을 모두 불러옵니다.

 

 

 결과는 요래 나오는데요. 이는 제가 열거형을 'bronze', 'silver', 'gold' 순으로 생성했기 때문입니다. 브론즈보다는 실버가, 실버보다는 골드가 더 높다는 정의를 제가 enum type을 선언하면서 만들어 주었기 때문입니다.