본문 바로가기
Developer/DB

[DB] PostgreSQL 테이블명세서 테이블정의서 추출 쿼리

by 순수한소년 2022. 9. 8.
728x90
반응형

#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
SELECT
    info. TABLE_NAME,
    info. COLUMN_NAME,
    info.udt_name as type,
    case
         when info.character_maximum_length is null
    then
         info.numeric_precision
    else info.character_maximum_length
     end as length,
    info.column_default,
    info.is_nullable,
    comm.column_comment as comment,
    case when pri_key.column_name is null then '' else 'PK' end as PK
FROM
    information_schema. COLUMNS info
LEFT JOIN (
    SELECT
        PS.schemaname as SCHEMA_NAME,
        PS.RELNAME AS TABLE_NAME,
        PA.ATTNAME AS COLUMN_NAME,
        PD.DESCRIPTION AS COLUMN_COMMENT
    FROM
        PG_STAT_ALL_TABLES PS,
        PG_DESCRIPTION PD,
        PG_ATTRIBUTE PA
    WHERE
        PS.RELID = PD.OBJOID
    AND PD.OBJSUBID <> 0
    AND PD.OBJOID = PA.ATTRELID
    AND PD.OBJSUBID = PA.ATTNUM
    ORDER BY
        PS.RELNAME,
        PD.OBJSUBID
) comm ON comm.SCHEMA_NAME = info.table_schema
AND comm. TABLE_NAME = info. TABLE_NAME
AND comm. COLUMN_NAME = info. COLUMN_NAME
LEFT JOIN (
    SELECT
        CC.*
    FROM
        INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC,
        INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE CC
    WHERE
        TC.CONSTRAINT_TYPE = 'PRIMARY KEY'
   AND TC.TABLE_CATALOG   = CC.TABLE_CATALOG
   AND TC.TABLE_SCHEMA    = CC.TABLE_SCHEMA
   AND TC.TABLE_NAME      = CC.TABLE_NAME
   AND TC.CONSTRAINT_NAME = CC.CONSTRAINT_NAME
) pri_key ON pri_key.table_schema = info.table_schema
AND pri_key. table_name = info.TABLE_NAME
AND pri_key. column_name = info. COLUMN_NAME
WHERE
    info.table_schema = 'public'
ORDER BY
    info. TABLE_NAME,
    info.ordinal_position;
cs

#

728x90
반응형