You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

仅拥有只读权限时,如何在DB2/PostgreSQL中列出模式下表名及行数?

只读权限下获取指定模式的表名、行数及列数方案

不同数据库的系统元数据视图不同,以下是主流数据库的实现方案,均无需CREATE TABLE或INSERT操作,仅需只读权限访问系统视图:

PostgreSQL

利用information_schema和pg_class视图查询,其中reltuples是PostgreSQL维护的近似行数:

SELECT
    t.table_name,
    c.reltuples AS row_count,
    COUNT(col.column_name) AS column_count
FROM
    information_schema.tables t
JOIN
    pg_class c ON t.table_name = c.relname
JOIN
    information_schema.columns col ON t.table_name = col.table_name
WHERE
    t.table_schema = 'your_schema' -- 替换为目标模式名
    AND t.table_type = 'BASE TABLE'
GROUP BY
    t.table_name, c.reltuples
ORDER BY
    t.table_name;
  • 若需要准确行数,可替换c.reltuples为(SELECT COUNT(*) FROM your_schema."||t.table_name||"),但大表执行会耗时较长,需确保账号对目标表有SELECT权限。

MySQL

通过information_schema的tables和columns视图获取:

SELECT
    t.table_name,
    t.table_rows AS row_count,
    COUNT(col.column_name) AS column_count
FROM
    information_schema.tables t
JOIN
    information_schema.columns col ON t.table_name = col.table_name
WHERE
    t.table_schema = 'your_schema' -- 替换为目标模式/数据库名
    AND t.table_type = 'BASE TABLE'
GROUP BY
    t.table_name, t.table_rows
ORDER BY
    t.table_name;
  • table_rows是存储引擎统计的近似值,InnoDB引擎下可能与实际行数偏差较大;需准确值的话,同样要对单个表执行SELECT COUNT(*)。

SQL Server

使用sys.tables、sys.partitions和sys.columns系统视图:

SELECT
    t.name AS table_name,
    SUM(p.rows) AS row_count,
    COUNT(c.column_id) AS column_count
FROM
    sys.tables t
JOIN
    sys.partitions p ON t.object_id = p.object_id
JOIN
    sys.columns c ON t.object_id = c.object_id
WHERE
    SCHEMA_NAME(t.schema_id) = 'your_schema' -- 替换为目标模式名
    AND p.index_id IN (0, 1) -- 仅统计堆或聚集索引,避免重复计数
GROUP BY
    t.name
ORDER BY
    t.name;
  • SUM(p.rows)为近似行数,准确值需执行SELECT COUNT(*) FROM your_schema.table_name。

Oracle

基于all_tables和all_tab_columns视图查询,注意模式名需大写(Oracle默认区分大小写):

SELECT
    t.table_name,
    t.num_rows AS row_count,
    COUNT(col.column_name) AS column_count
FROM
    all_tables t
JOIN
    all_tab_columns col ON t.table_name = col.table_name
                        AND t.owner = col.owner
WHERE
    t.owner = 'YOUR_SCHEMA' -- 替换为大写的目标模式名
GROUP BY
    t.table_name, t.num_rows
ORDER BY
    t.table_name;
  • num_rows来自Oracle的统计信息,需定期更新才会准确;只读权限无法执行ANALYZE TABLE更新统计,若需准确行数只能逐个表执行SELECT COUNT(*)。

通用注意事项

  1. 确保你的只读账号有权访问对应的系统元数据视图(大部分数据库默认开放此类权限给只读用户);
  2. 近似行数适合快速了解表规模,准确行数适合精确统计,但大表会显著增加查询耗时。

内容的提问来源于stack exchange,提问作者codingEnthu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 03:52:43