[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 Osiris4Net 阅读(14) 评论(0) 编辑 收藏 举报