[PostgreSql]获取表结构数据

PostgreSql的表结构数据存储在pg_stat_user_tables。

pg_stat_user_tables是PostgreSQL中的一个系统表,它记录了用户表的统计信息,比如表的大小、行数、是否在事务中等。

以下是pg_stat_user_tables的一些重要字段及其说明:

relid: 表的OID。

schemaname: 表所属的schema名称。

relname: 表的名称。

seq_scan: 是否通过序列扫描方式访问了表。

seq_tup_read: 通过序列扫描方式读取的行数。

idx_scan: 是否通过索引扫描方式访问了表。

idx_tup_fetch: 通过索引扫描方式获取的行数。

n_tup_ins: 插入到表中的行数。

n_tup_upd: 更新表中的行数。

n_tup_del: 从表中删除的行数。

n_tup_hot_upd: 在表中执行的热更新数(不需要行移动的更新)。

n_live_tup: 表中当前活跃的行数。

n_dead_tup: 表中当前死亡的行数。

vacuum_count: 表被VACUUM操作清理的次数。

n_mod_since_analyze: 自从上次分析操作以来表中变更的行数。

last_vacuum: 表上次被VACUUM操作清理的时间。

last_autovacuum: 表上次被自动VACUUM操作清理的时间。

last_analyze: 表上次被ANALYZE操作更新统计信息的时间。

last_autoanalyze: 表上次被自动ANALYZE操作更新统计信息的时间。

vacuum_segs: 表的VACUUM操作使用的segments数量。

autovacuum_segs: 表的自动VACUUM操作使用的segments数量。

analyze_segs: 表的ANALYZE操作使用的segments数量。

autoanalyze_segs: 表的自动ANALYZE操作使用的segments数量。

 

以下是获取表构成数据用的SQL:

 1 SELECT
 2     COALESCE(SPLIT_PART(t.COMMENT, ':', 1), c.column_name) AS "注释名"
 3     , c.column_name AS "列名"
 4     , ( 
 5         CASE c.udt_name 
 6             WHEN 'date' THEN 'DateTime' 
 7             WHEN 'varchar' THEN 'string' 
 8             WHEN 'text' THEN 'string' 
 9             WHEN 'timestamp' THEN 'DateTime' 
10             WHEN 'numeric' THEN 'decimal' 
11             ELSE ( 
12                 CASE 
13                     WHEN strpos(c.udt_name, 'int') > 0 
14                         THEN 'decimal' 
15                     ELSE c.udt_name 
16                     END
17             ) 
18             END
19     ) AS "类型"
20     , ordinal_position AS "行顺序"
21     , DENSE_RANK() OVER (ORDER BY c.table_name) AS "表顺序"
22     , c.table_name AS "表名" 
23 FROM
24     information_schema.columns c 
25     LEFT JOIN ( 
26         SELECT
27             a.table_name AS table_name
28             , a.column_name AS column_name
29             , a.data_type AS data_type
30             , a.COMMENT AS COMMENT 
31         FROM
32             ( 
33                 SELECT
34                     pg_stat_user_tables.relname AS table_name
35                     , information_schema.columns.column_name AS column_name
36                     , information_schema.columns.data_type AS data_type
37                     , ( 
38                         SELECT
39                             description 
40                         FROM
41                             pg_description 
42                         WHERE
43                             pg_description.objoid = pg_stat_user_tables.relid 
44                             AND pg_description.objsubid = information_schema.columns.ordinal_position
45                     ) AS COMMENT 
46                 FROM
47                     pg_stat_user_tables
48                     , information_schema.columns 
49                 WHERE
50                     pg_stat_user_tables.relname = information_schema.columns.table_name 
51                     AND pg_stat_user_tables.schemaname = current_schema()
52             ) AS a 
53         WHERE
54             a.COMMENT IS NOT NULL
55     ) t 
56         ON c.table_name = t.table_name 
57         AND c.column_name = t.column_name 
58 WHERE
59     table_schema = 'public' -- schema名
60 ORDER BY
61     c.table_name
62     , ordinal_position;

 

posted on 2024-07-16 10:08  Osiris_Syou  阅读(1)  评论(0编辑  收藏  举报

导航