information_schema.columns 에는 현재 column에 적용된 데이타 타입 만 보이고
pg_catalog.pg_type 에는 원하지 않는 모든 데이타 타입 정보들이 보이네요.
데이타 타입 을 생성했지만 column에 적용하지 않은 데이타 타입만 보는 방법은 없을 까요?
부탁드려요
PostgresDBA2016-12-13 (화) 17:11
초보자 수준의 질문은 아닙니다. ㅎㅎ
PostgreSQL 모니터링 툴 개발업체 분이신가요? 클라이언트 툴 만드시나보네요.
아래 쿼리 잘 보정해서 쓰면 되지 않을까요?
SELECT n.nspname as "Schema",
pg_catalog.format_type(t.oid, NULL) AS "Name",
t.typname AS "Internal name",
CASE WHEN t.typrelid != 0
THEN CAST('tuple' AS pg_catalog.text)
WHEN t.typlen < 0
THEN CAST('var' AS pg_catalog.text)
ELSE CAST(t.typlen AS pg_catalog.text)
END AS "Size",
pg_catalog.array_to_string(
ARRAY(
SELECT e.enumlabel
FROM pg_catalog.pg_enum e
WHERE e.enumtypid = t.oid
ORDER BY e.enumsortorder
),
E'\n'
) AS "Elements"
FROM pg_catalog.pg_type t
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace
WHERE (t.typrelid = 0 OR (SELECT c.relkind = 'c' FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid))
AND NOT EXISTS(SELECT 1 FROM pg_catalog.pg_type el WHERE el.oid = t.typelem AND el.typarray = t.oid)
AND n.nspname <> 'pg_catalog'
AND n.nspname <> 'information_schema'
AND n.nspname <> 'sys'
AND n.nspname <> 'dbo'
AND pg_catalog.pg_type_is_visible(t.oid)
ORDER BY 1, 2;
댓글주소
고은진2016-12-13 (화) 18:02
오!! 감사합니다!! 저도 마침 답변으로 올리려고 했는데 좋은 답변을 달아주셨네요~
혹시 몰라 저도 답변으로 기록합니다.
댓글주소
고은진2016-12-13 (화) 18:01
커맨드 명령어 /dT 와 같이 UDT 리스트를 출력하는 쿼리입니다.
SELECT n.nspname as schema, t.typname as type
FROM pg_type t
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace
WHERE (t.typrelid = 0 OR (SELECT c.relkind = 'c' FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid))
AND NOT EXISTS(SELECT 1 FROM pg_catalog.pg_type el WHERE el.oid = t.typelem AND el.typarray = t.oid)
AND n.nspname NOT IN ('pg_catalog', 'information_schema');
SELECT n.nspname as schema, t.typname as type
FROM pg_type t
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace
WHERE (t.typrelid = 0 OR (SELECT c.relkind = 'c' FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid))
AND NOT EXISTS(SELECT 1 FROM pg_catalog.pg_type el WHERE el.oid = t.typelem AND el.typarray = t.oid)
AND n.nspname NOT IN ('pg_catalog', 'information_schema')
AND NOT EXISTS(SELECT 1 FROM pg_attribute at WHERE at.atttypid = t.oid);
댓글주소
PostgresDBA2016-12-13 (화) 18:37
간혹 도움만 받고 입을 싹 닦는 분(?)들이 계신데..
이렇게 솔루션 찾은후 답변을 달아주시는 분들... 최곱니다!
다른 분들한테도 많은 도움이 될거예요.