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 7244 게시물 읽기
No. 7244
컬럼정보를 자세히?
작성자
질문이
작성일
2007-10-25 09:50
조회수
6,135

PostgreSQL 시작하고 막히는 부분 있어서 질문 올립니다.

컬럼 정보를 디테일하게 보려고 하는데 ... 아래 쿼리 까지는 이곳 게시판 보고

어떻게든 만들어 봤습니다...

select

    a.attrelid, a.attnum, a.attname, b.typname, a.attnotnull, c.description--, isprimarykey, foreginkeyname
from
    "pg_catalog"."pg_attribute" a
    inner join "pg_catalog"."pg_type" b on a.atttypid = b.oid
    left outer join (select * from "pg_catalog"."pg_description" where objoid = (select oid from "pg_catalog"."pg_class" where relname = 'TreeTable')) c on a.attnum = c.objsubid
where
    a.attrelid = c.objoid
    and a.attnum > 0
    and not a.attisdropped
order by
    a.attnum asc;

결과는 아래와 같고요.

 

attnum

attname

typname

attnotnull

description

1

1 TreeID int4 t 아이디

2

2 ParentID int4 t 부모아이디

3

3 Title varchar t 타이틀

추가로 isprimarykey(boolean), foreginkeyname(string) 정보를 추가로 넣고 싶습니다만, 초보의 삽질이 진도가 안나갑니다. ㅡ.ㅡ;;

완성된 쿼리결과는 아래와 같아야합니다.

 

attnum

attname

typname

attnotnull

description isprimarykey foreginkeyname

1

1 TreeID int4 t 아이디 t null

2

2 ParentID int4 t 부모아이디 f FK_RelTable_ParentID

3

3 Title varchar t 타이틀 f null

 

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

psql 을 실행할 때 -E 옵션을 주시면 내부 명령어(\d, \dt 등)의 실제 쿼리를 보여줍니다.


psql -E 디비이름


이런식으로요


\d 테이블이름


해보시면 그 명령어가 어떤 쿼리를 사용해서 세부적인 정보를 가져오는지 아실 수 있습니다 

신기배(소타)님이 2007-10-25 12:25에 작성한 댓글입니다.

일단은 여기 까지 마무리를.. 했습니다. 실행 결과가 나오니 잼있군요^^

이제, Sequence와 기타 여러가지를 더 추가를 해 봐야겠습니다.

원하는 결과는 나왔지만 아래 코드들이 정상적인 코딩인지는 잘 모르겠음 ㅡ.ㅡ;;

select
    a.attnum
    , a.attname
    , b.typname
    , a.attnotnull
    , case when int4(e.conkey[1])>0 then true else false end as "isprimary"
    , case when int4(e.conkey[1])>0 then e.conname else '' end as "primaryname"
    , case when int4(d.conkey[1])>0 then true else false end as "isforeginkey"
    , case when int4(d.conkey[1])>0 then d.conname else '' end as "foreginkeyname"
    , c.description
from
    "pg_catalog"."pg_attribute" a
    inner join "pg_catalog"."pg_type" b
        on a.atttypid = b.oid
    left outer join (select * from "pg_catalog"."pg_description" where objoid = (select oid from "pg_catalog"."pg_class" where relname = 'TreeTable')) c
        on a.attnum = c.objsubid
    left outer join (select q.conname, q.conkey, q.confkey, p.relfilenode, p.oid, p.relname from pg_constraint q, pg_class p where p.oid=q.conrelid and p.relname='TreeTable' and q.contype='f') d
        on a.attnum = int4(d.conkey[1])
    left outer join (select q.conname, q.conkey, q.confkey, p.relfilenode, p.oid, p.relname from pg_constraint q, pg_class p where p.oid=q.conrelid and p.relname='TreeTable' and q.contype='p') e
        on a.attnum = int4(e.conkey[1])
where
    a.attrelid = (select c.oid from "pg_catalog"."pg_class" c where c.relname = 'TreeTable' and pg_catalog.pg_table_is_visible(c.oid))
    and a.attnum > 0
    and not a.attisdropped
order by
    a.attnum asc;

 

질문이님이 2007-10-25 16:44에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
7247install 할때 제가 정한 폴더에 설치되게 할수 없나요? [2]
장준영
2007-10-26
5457
7246이런기능도 있는지 궁금합니다. [3]
심상호
2007-10-26
5686
7245리눅스에서 postgres만들고 pgadmin 연결시 설정하는법..
김선우
2007-10-25
6794
7244컬럼정보를 자세히? [2]
질문이
2007-10-25
6135
7243pg용 보드 좀 주세요~
ppant
2007-10-23
5373
7242쿼리 플랜... [3]
데니
2007-10-23
6178
7241PostgreSQL 예찬론 [3]
최정대
2007-10-18
6690
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다