반응형
사용자 정의 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가 표시되지 않는다는 것입니다.
반응형
'developer tip' 카테고리의 다른 글
PHP : array_map 함수에서 인덱스를 얻을 수 있습니까? (0) | 2020.11.26 |
---|---|
PHP 스크립트에서 max_execution_time 가져 오기 (0) | 2020.11.26 |
Swift의 UICollectionView의 셀 registerClass (0) | 2020.11.26 |
셸 스크립트를 사용하여 도커 컨테이너 내에서 스크립트 실행 (0) | 2020.11.26 |
* 사용을 정당화 할 수 있습니까? (0) | 2020.11.26 |