programing

열거형에 포함될 수 있는 모든 값을 가져오기 위한 SQL 쿼리

bestprogram 2023. 5. 12. 22:47

열거형에 포함될 수 있는 모든 값을 가져오기 위한 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.


저스틴 옴스가 몇 가지 추가 팁을 지적해 준 덕분에 제 답변에 포함시켰습니다.

시도:

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_enum"의 내용에 대한 단일 열 결과 집합과 유형 텍스트의 "your_column"이라는 열이 반환됩니다.

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

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

언급URL : https://stackoverflow.com/questions/1616123/sql-query-to-get-all-values-a-enum-can-have