prosource

list Postgres ENUM 유형

probook 2023. 5. 3. 21:31
반응형

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

반응형