[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:

SELECT
    COALESCE(SPLIT_PART(t.COMMENT, ':', 1), c.column_name) AS "注释名"
    , c.column_name AS "列名"
    , (
        CASE c.udt_name
            WHEN 'date' THEN 'DateTime'
            WHEN 'varchar' THEN 'string'
            WHEN 'text' THEN 'string'
            WHEN 'timestamp' THEN 'DateTime'
            WHEN 'numeric' THEN 'decimal'
            ELSE (
                CASE
                    WHEN strpos(c.udt_name, 'int') > 0
                        THEN 'decimal'
                    ELSE c.udt_name
                    END
            )
            END
    ) AS "类型"
    , ordinal_position AS "行顺序"
    , DENSE_RANK() OVER (ORDER BY c.table_name) AS "表顺序"
    , c.table_name AS "表名"
FROM
    information_schema.columns c
    LEFT JOIN (
        SELECT
            a.table_name AS table_name
            , a.column_name AS column_name
            , a.data_type AS data_type
            , a.COMMENT AS COMMENT
        FROM
            (
                SELECT
                    pg_stat_user_tables.relname AS table_name
                    , information_schema.columns.column_name AS column_name
                    , information_schema.columns.data_type AS data_type
                    , (
                        SELECT
                            description
                        FROM
                            pg_description
                        WHERE
                            pg_description.objoid = pg_stat_user_tables.relid
                            AND pg_description.objsubid = information_schema.columns.ordinal_position
                    ) AS COMMENT
                FROM
                    pg_stat_user_tables
                    , information_schema.columns
                WHERE
                    pg_stat_user_tables.relname = information_schema.columns.table_name
                    AND pg_stat_user_tables.schemaname = current_schema()
            ) AS a
        WHERE
            a.COMMENT IS NOT NULL
    ) t
        ON c.table_name = t.table_name
        AND c.column_name = t.column_name
WHERE
    table_schema = 'public' -- schema名
ORDER BY
    c.table_name
    , ordinal_position;

相关推荐

  1. [PostgreSql]获取结构数据

    2024-07-18 07:24:03       17 阅读
  2. 获取 PostgreSQL 某个的定义

    2024-07-18 07:24:03       30 阅读
  3. 数据结构】链

    2024-07-18 07:24:03       48 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 07:24:03       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 07:24:03       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 07:24:03       45 阅读
  4. Python语言-面向对象

    2024-07-18 07:24:03       55 阅读

热门阅读

  1. 设计模式-工厂设计

    2024-07-18 07:24:03       19 阅读
  2. 构建完成,通知我:在Gradle中配置构建通知

    2024-07-18 07:24:03       16 阅读
  3. Netty Websocket

    2024-07-18 07:24:03       17 阅读