[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'))