설문조사
PostgreSQL/PPAS 관련 듣고 싶은 교육은


총 게시물 176건, 최근 0 건
   

user defined type list 를 볼 수 있는 방법이 있을까요?

글쓴이 : 고은진 날짜 : 2016-12-12 (월) 18:09 조회 : 7788
안녕하세요. PostgreSQL 초보입니다.

user 가 생성한 User Defined Type 만 보고싶은데요.

information_schema.columns 에는 현재 column에 적용된 데이타 타입 만 보이고
pg_catalog.pg_type 에는 원하지 않는 모든 데이타 타입 정보들이 보이네요.

데이타 타입 을 생성했지만 column에 적용하지 않은 데이타 타입만 보는 방법은 없을 까요?

부탁드려요

PostgresDBA 2016-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');

-----------------------------------------------------------------------------------------------------

column에서 사용하지 않는 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')
AND        NOT EXISTS(SELECT 1 FROM pg_attribute at WHERE at.atttypid = t.oid);
댓글주소
PostgresDBA 2016-12-13 (화) 18:37
간혹 도움만 받고 입을 싹 닦는 분(?)들이 계신데..
이렇게  솔루션 찾은후  답변을 달아주시는 분들... 최곱니다!
다른 분들한테도 많은 도움이 될거예요.
댓글주소
   

postgresdba.com