[postgresql] 열거 형이 가질 수있는 모든 값을 가져 오는 SQL 쿼리

Postgresql은 얼마 전에 열거 지원을 받았습니다.

CREATE TYPE myenum AS ENUM (
'value1',
'value2',
);

쿼리와 함께 열거 형에 지정된 모든 값을 얻으려면 어떻게합니까?



답변

배열을 원한다면 :

SELECT enum_range(NULL::myenum)

열거 형의 각 항목에 대해 별도의 레코드를 원하는 경우 :

SELECT unnest(enum_range(NULL::myenum))  

추가 정보

이 솔루션은 열거 형이 기본 스키마에없는 경우에도 예상대로 작동합니다. 예를 들어, 교체 myenum와 함께 myschema.myenum.

위 쿼리에서 반환 된 레코드의 데이터 형식은 myenum입니다. 수행중인 작업에 따라 텍스트로 전송해야 할 수도 있습니다. 예 :

SELECT unnest(enum_range(NULL::myenum))::text

열 이름을 지정하려면을 추가 할 수 있습니다 AS my_col_name.


추가 답변을 지적 해준 Justin Ohms에게 감사의 말을 전합니다.


답변

시험:

SELECT e.enumlabel
  FROM pg_enum e
  JOIN pg_type t ON e.enumtypid = t.oid
  WHERE t.typname = 'myenum'


답변

SELECT unnest(enum_range(NULL::your_enum))::text AS your_column

그러면 텍스트 유형이 “your_column”인 열과 함께 “your_enum”열거 내용의 단일 열 결과 집합이 반환됩니다.


답변

다음 쿼리를 사용하여 열거 형에 대한 모든 열거 형 값을 가져올 수 있습니다. 쿼리를 사용하면 열거 형이 존재하는 네임 스페이스를 선택할 수 있습니다 (이 열거 형이 여러 네임 스페이스에 정의 된 경우 필요합니다. 그렇지 않으면 쿼리의 해당 부분을 생략 할 수 있음).

SELECT enumlabel
FROM pg_enum
WHERE enumtypid=(SELECT typelem
                 FROM pg_type
                 WHERE typname='_myenum' AND
                 typnamespace=(SELECT oid
                               FROM pg_namespace
                               WHERE nspname='myschema'))


답변