developer tip

사용자 정의 postgresql 열거 유형 정의를 표시하는 방법이 있습니까?

optionbox 2020. 11. 26. 08:11
반응형

사용자 정의 postgresql 열거 유형 정의를 표시하는 방법이 있습니까?


postgresql 유형을 정의했다고 가정 해 보겠습니다.

CREATE TYPE my_type AS ENUM('foo', 'bar');

생성 후 유형 정의를 표시하는 방법이 있습니까?

"\ d my_type"에 "ENUM ( 'foo', 'bar')"가 표시 될 것으로 예상하지만 다음과 같이 표시됩니다.

Did not find any relation named "my_type"

pg_type 테이블이 충분한 정보를 제공하지 않는 것 같습니다.


당신이 추구하는 \ dT이지만 "CREATE"문으로 제공하지 않습니다. 도메인에 \ dD를 사용합니다.

\dT+ action.action_status
                          List of data types
 Schema |         Name         | Internal name | Size | Elements | Description 
--------+----------------------+---------------+------+----------+-------------
 action | action.action_status | action_status | 4    | pending +| 
        |                      |               |      | live    +| 
        |                      |               |      | done    +| 
        |                      |               |      | notdone  | 
(1 row)

이것을 확인하십시오 :

select enum_range(null::my_type)

나는 이것이 훨씬 더 간단한 해결책이라고 생각합니다 :).


전체 이름 (유형 이름 및 스키마)과 모든 enum레이블 의 정렬 된 목록 만 원하는 경우이 쿼리는 다음을 수행합니다.

SELECT n.nspname AS "schema", t.typname
     , string_agg(e.enumlabel, '|' ORDER BY e.enumsortorder) AS enum_labels
FROM   pg_catalog.pg_type t 
JOIN   pg_catalog.pg_namespace n ON n.oid = t.typnamespace 
JOIN   pg_catalog.pg_enum e ON t.oid = e.enumtypid  
WHERE  t.typname = 'my_enum_type'
GROUP  BY 1,2;

보고:

 schema | typname      | enum_labels
--------+--------------+-------------
 public | my_enum_type | foo|bar

string_agg()Postgres 9.0 이상이 필요하므로 array_agg()이전 버전으로 교체하십시오 .


SQL CREATE을 얻으려면 pg_dump덤프 파일을 사용 하고 살펴볼 수 있습니다 .

또는 훨씬 더 실질적으로 데이터베이스의 모든 개체에 대해 리버스 엔지니어링 된 SQL 생성 스크립트를 표시 하는 pgAdmin사용 합니다. 에서 선택하면 object browser생성 스크립트가 SQL pane. SQL editor자동으로 새로 열린 창에 스크립트를 복사하는 옵션도 있습니다. 여기서 편집하고 실행할 수 있습니다.


SELECT t.typname
FROM pg_class c JOIN pg_attribute a ON c.oid = a.attrelid JOIN pg_type t ON a.atttypid = t.oid
WHERE c.relname = 'your_type';

까다로운 부분은 단순히 이러한 뷰에서 *를 선택하면 결과에 OID가 표시되지 않는다는 것입니다.

참고 URL : https://stackoverflow.com/questions/9535937/is-there-a-way-to-show-a-user-defined-postgresql-enumerated-type-definition

반응형