仅拥有只读权限时,如何在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(*)。
通用注意事项
- 确保你的只读账号有权访问对应的系统元数据视图(大部分数据库默认开放此类权限给只读用户);
- 近似行数适合快速了解表规模,准确行数适合精确统计,但大表会显著增加查询耗时。
内容的提问来源于stack exchange,提问作者codingEnthu
相关产品推荐
相关产品推荐

