database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 9742 게시물 읽기
No. 9742
User Defined Type 리스트 보는 방법
작성자
고은진(ojhlovekej)
작성일
2016-12-12 18:13
조회수
8,051

안녕하세요. 

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

information_schema.columns 에는 현재  column에 적용중인 데이타 타입만 보이고

pg_catalog.pg_type 에는 원하지 않는 모든 데이타 타입 정보들이 보이네요.

 

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

 

 

 

이 글에 대한 댓글이 총 4건 있습니다.

pg_type 테이블의 칼럼들을 잘 보시고,  pg_attribute.atttypid 값을 살펴 보아서 not in () 구문을 쓰든지,

except 구문을 쓰든지 해야겠네요.

쿼리가 조금 복잡하겠네요.

여튼, pg_class, pg_type, pg_attribute 테이블들을 모두 사용해야 할 것 같습니다.

 

(추가)

사용자 정의 자료형이라 함은, 해당 사용자가 만든 자료형 가운데, 테이블을 만들면서 자동으로 만들어진 자료형을 말하지 않는다로 정의하면, 그 정의 대로 쿼리를 만드셔야 할 것 같습니다.

사용자가 테이블이나 뷰를 만들면, 해당 이름과 같은 자료형과, '_' 문자가 앞에 붙은 자료형이 자동으로 만들어집니다. 참고하세요.

 

김상기(ioseph)님이 2016-12-12 18:35에 작성한 댓글입니다.
이 댓글은 2016-12-12 18:41에 마지막으로 수정되었습니다.

not in() 이나 except 구문을 쓰려면 

pg_catalog.pg_type 에서 user 가 생성한 UDT 들만 가져오고

거기서  pg_attribute.atttypid 값을 not in() 이나 except  해야 할 것 같은데요

 

pg_catalog.pg_type에서 UDT만 가져오는 방법을 모르겠네요 ;; 

pgcatalog 에서 생성한 type 들과의 차이점이 보이지 않아서요 /// 

 

그 방법이 궁금합니다. 혹시 알 수 있을까요? 

 

(추가) 제가 위에서 말한 사용자 정의 자료형은  create type ~ 명령어로 생성한 자료형입니다.  

고은진(ojhlovekej)님이 2016-12-13 11:14에 작성한 댓글입니다.
이 댓글은 2016-12-13 11:28에 마지막으로 수정되었습니다.

사용자 정의 자료형은 pg_type.typnamespace 값이 pg_catalog 일 수 없습니다.

이걸로 찾으셔도 됩니다.

김상기(ioseph)님이 2016-12-13 13:46에 작성한 댓글입니다.

커맨드 명령어 /dT 와 같은 결과인 User Defined Type 리스트를 보여주는 쿼리입니다. 

 

 

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') 

 

 

 

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

현재 컬럼에서 사용중이지 않은 User Defined Type 만을 보여주는 쿼리입니다.

 

 

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) 

 

 

고은진(ojhlovekej)님이 2016-12-13 17:44에 작성한 댓글입니다.
이 댓글은 2016-12-13 17:53에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
9747Postgresql C 라이브러리 [3]
궁금궁금
2016-12-23
7657
9746윈도우 환경에서 이중화 방법 [3]
사랑
2016-12-22
9411
9744PostgreSQL JDBC 및 현재 접속한 세션 정보 가져오기 [3]
궁금궁금
2016-12-22
8631
9742User Defined Type 리스트 보는 방법 [4]
고은진
2016-12-12
8051
9741DB 물리디스크 공간확보 문제 질의드립니다. Drop table관련 [1]
PG마스터
2016-12-11
8250
9740공공기관, 행정기관에서 postgresql 을 쓰는 사례가 있나요? [1]
전상도
2016-12-08
8087
9739중복 데이터 내에서 삭제하고픈 목록만 [1]
ampwings
2016-12-05
7537
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.058초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다