list Postgres ENUM 유형
ENUM 유형을 나열하기 위해 제안된 쿼리가 좋습니다.하지만, 그것은 단지 목록일 뿐입니다.schema
그리고typname
실제 ENUM 값을 나열하려면 어떻게 해야 합니까?예를 들어, 위의 링크된 답변에서, 저는 다음과 같은 결과를 원합니다.
schema type values
------------- -------- -------
communication channels 'text_message','email','phone_call','broadcast'
select n.nspname as enum_schema,
t.typname as enum_name,
e.enumlabel as enum_value
from pg_type t
join pg_enum e on t.oid = e.enumtypid
join pg_catalog.pg_namespace n ON n.oid = t.typnamespace;
다음을 통해 데이터 유형을 나열할 수 있습니다.
\dT+ channels
https://www.postgresql.org/docs/current/static/app-psql.html#APP-PSQL-META-COMMANDS
select enum_range(null::my_enum)
어디에my_enum
열거형 형식 이름입니다.
설명서: http://www.postgresql.org/docs/9.5/static/functions-enum.html
다음 항목:SELECT unnest(enum_range(NULL::myenum))
열거형을 행으로 반환합니다.
저는 항상 이걸 어떻게 하는지 잊어버려요.다른 답변과 의견에 따르면, 여기 쉼표로 구분된 목록입니다.저는 복사 붙여넣기 스니펫을 좋아합니다.도와주셔서 감사합니다.
select n.nspname as enum_schema,
t.typname as enum_name,
string_agg(e.enumlabel, ', ') as enum_value
from pg_type t
join pg_enum e on t.oid = e.enumtypid
join pg_catalog.pg_namespace n ON n.oid = t.typnamespace
group by enum_schema, enum_name;
SELECT enum_range(NULL::myenum)
@dpb:
이에 대한 영구적인 간편 액세스 방법을 만들려면 항상 보기를 만들 수 있습니다.
CREATE OR REPLACE VIEW oublic.enumz AS
SELECT n.nspname AS enum_schema,
t.typname AS enum_name,
e.enumlabel AS enum_value
FROM pg_type t
JOIN pg_enum e ON t.oid = e.enumtypid
JOIN pg_namespace n ON n.oid = t.typnamespace;
그런 다음 insert 명령에 대한 트리거를 생성할 수 있습니다.
위의 내용은 나중에 참조할 수 있도록 데이터베이스에 저장됩니다.
여기에는 모든 열거형 열과 해당 가능성 값이 나열됩니다.
SELECT
table_schema || '.' || table_name || '.' || column_name as field_name,
pg_enum.enumlabel as value
FROM pg_type
JOIN pg_enum ON pg_enum.enumtypid = pg_type.oid
JOIN pg_namespace on pg_type.typnamespace = pg_namespace.oid
JOIN information_schema.columns ON (information_schema.columns.udt_name = pg_type.typname AND information_schema.columns.udt_schema = pg_namespace.nspname)
WHERE pg_type.typtype = 'e'
ORDER BY field_name, pg_enum.enumsortorder;
주문추가
SELECT
n.nspname AS enum_schema,
t.typname AS enum_name,
e.enumlabel AS enum_value
FROM
pg_type t
JOIN pg_enum e ON t.oid = e.enumtypid
JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace
ORDER BY
enum_name,
e.enumsortorder;
테이블 및 열 이름이 있지만 유형 이름은 없는 경우 다음을 사용합니다.
SELECT pg_enum.enumlabel
FROM pg_type
JOIN pg_enum ON pg_enum.enumtypid = pg_type.oid
JOIN information_schema.columns ON information_schema.columns.udt_name =
pg_type.typname
WHERE pg_type.typtype = 'e' AND
table_name = $1 AND column_name = $2 ORDER BY pg_enum.enumsortorder
사용하는 경우enum_range
(유형에 사용된 다른 답변과 달리) 열에는 존재하는 각 행에 대한 데이터가 반환됩니다. 이 데이터는 사용자가 원하는 데이터가 아닙니다.따라서 위의 쿼리를 대신 사용합니다.
언급URL : https://stackoverflow.com/questions/9540681/list-postgres-enum-type
'prosource' 카테고리의 다른 글
CTRL-r과 유사하게 검색 Bash 기록을 전달할 수 없습니다. (0) | 2023.05.03 |
---|---|
파이프 오류: Microsoft Visual C++ 14.0이 필요합니다. (0) | 2023.05.03 |
파이썬 3은 0에 대해 "00"을 리터럴로 허용하지만 1에 대해 "01"을 리터럴로 허용하지 않는 이유는 무엇입니까? (0) | 2023.05.03 |
이클립스의 어두운 색 구성표 (0) | 2023.05.03 |
Git 분기 이름에 슬래시 문자 사용 (0) | 2023.05.03 |