如何找到 Postgres 中所有表的行数

2023-12-07

我正在寻找一种方法来查找 Postgres 中所有表的行数。我知道我可以一次做一张桌子:

SELECT count(*) FROM table_name;

但我想查看所有表的行数,然后按其排序以了解我的所有表有多大。


有三种方法可以得到这种计数,每种方法都有自己的权衡。

如果您想要真实的计数,则必须像针对每个表使用的那样执行 SELECT 语句。这是因为 PostgreSQL 将行可见性信息保存在行本身中,而不是其他任何地方,因此任何准确的计数只能与某些事务相关。您将获得该事务在执行时所看到的内容的计数。您可以自动执行此操作以针对数据库中的每个表运行,但您可能不需要那么高的准确性或希望等待那么长时间。

WITH tbl AS
  (SELECT table_schema,
          TABLE_NAME
   FROM information_schema.tables
   WHERE TABLE_NAME not like 'pg_%'
     AND table_schema in ('public'))
SELECT table_schema,
       TABLE_NAME,
       (xpath('/row/c/text()', query_to_xml(format('select count(*) as c from %I.%I', table_schema, TABLE_NAME), FALSE, TRUE, '')))[1]::text::int AS rows_n
FROM tbl
ORDER BY rows_n DESC;

第二种方法指出,统计收集器随时跟踪大致有多少行是“活动的”(未删除或被以后的更新废弃)。在繁重的活动下,该值可能会略有偏差,但通常是一个不错的估计:

SELECT schemaname,relname,n_live_tup 
  FROM pg_stat_user_tables 
ORDER BY n_live_tup DESC;

这还可以显示有多少行已死亡,这本身就是一个值得监视的有趣数字。

第三种方法是注意系统 ANALYZE 命令(从 PostgreSQL 8.3 开始由 autovacuum 进程定期执行以更新表统计信息)也会计算行估计。你可以像这样抓住那个:

SELECT 
  nspname AS schemaname,relname,reltuples
FROM pg_class C
LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
WHERE 
  nspname NOT IN ('pg_catalog', 'information_schema') AND
  relkind='r' 
ORDER BY reltuples DESC;

很难说使用这些查询中哪一个更好。通常我会根据我是否还想在 pg_class 内部或 pg_stat_user_tables 内部使用更有用的信息来做出决定。出于基本的计数目的,只是为了了解物体的总体大小,两者都应该足够准确。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何找到 Postgres 中所有表的行数 的相关文章

随机推荐

  • 在 SSIS 中动态更改服务器名称

    我的 SSIS 包在开发周期 开发 QA 暂存和生产 期间会经历多个环境 因此我想使用 SSIS 中的配置来设置连接管理器中的服务器名称 这样我就不会不需要手动完成此操作 我读过有关使用 xml 配置文件 SQL 配置表和环境变量的内容 然
  • 谷歌地图:未捕获的类型错误:类型错误

    在几个页面上 我开始收到上述错误 但仅在 Chrome 中 这是一些简单的代码来演示该错误
  • 使用 boost::dynamic_bitset 作为键值对序列化 boost::bimap

    我有兴趣序列化boost bimap含有boost dynamic bitset这样我就可以保存它并在需要时加载回来 我已经尝试这样做 但遇到了很多错误 我随身携带的代码如下 Example program include
  • python 中的布尔值是可变的吗?

    我在 python 中有以下代码 def update request id success 0 try product Mattress objects get id id success 1 except Mattress DoesNo
  • C# 内存地址和变量

    在C 中 有没有办法 获取存储在a中的内存地址 引用类型变量 获取a的内存地址 多变的 EDIT int i int pi i 如何打印 pi 的十六进制值 对于 2 运算符的工作方式与 C 中相同 如果变量不在堆栈上 您可能需要使用fix
  • 从“SecKeychainFindGenericPassword”给出的“SecKeychainItemRef”中提取“用户名”?

    从这个问题 我知道你可以使用SecKeychainFindGenericPassword without用户名值 它仍然会返回给定服务的钥匙串项 但是我如何获取用户名呢 仅使用服务名称获取存储在钥匙串中的用户名 或者 您应该在哪里存储用户名
  • 是否可以将网页内容读入字符串中,以便我可以解析数据?

    我希望能够让我的 iPhone 将 URL 或者实际上是 url 指向的文件 加载到字符串中 我希望能够执行此操作的原因是这样我就可以解析字符串以查找标签并从中提取一些值 这些文件主要是网页 例如 html 或 asp 等 有人能给我一些提
  • 导出并发布 Typescript 中的所有类型和接口

    我正在尝试发布一个打字稿库 我不清楚如何公开所有类型和接口 这是我的设置 mylib src types mytypes ts index ts package json tsconfig json index ts import MyIn
  • Firefox - 删除未修饰复选框的边框

    我有一个复选框appearance none 这在 Chrome 中有效 但在 Firefox 中它留下了一个我无法删除的插入边框 我努力了border none已经 我这里有一个小提琴 http jsfiddle net jcJJ5 不幸
  • 根据 HTML 文本匹配产品价格

    我正在尝试在字符串上使用简单的正则表达式来获取定价信息 但是我的preg match all根本就是没有找到它应该找到的东西 我正在寻找例如 or 或者有时货币符号可能被编码为 HTML 实体 例如对于英镑 pound or 163 使用有
  • Django:在模型 save() 方法中返回序列化器 ValidationError

    我使用 django rest framework 在 Django 框架内创建 Rest API 并且可以返回任何validationError除了序列化器方法之外 但是 我想知道是否有可能返回错误save Django的方法model被
  • 将函数更改为 PDO

    这是我的api中使用的语句 这是第二个 result下面整个函数中的变量 如何将其更改为使用 PDO result query SELECT p IdPhoto p device token title p IdUser FROM phot
  • 如何在nodejs中向mysql查询回调传递参数

    我试图找出将自定义数据传递到查询调用以在回调中可用的正确方法 我在nodejs 中使用MySQL 库 所有最新版本 我调用了 connection query sql function err result 我找不到一种方法来 1 将自定义
  • 在父元素内将对象序列化为 XML

    我有一个 WPF C 程序 有时我需要将对象序列化为 XML 在其他地方 我一直在使用这个 TextWriter writer new StreamWriter xmlFilePath XmlSerializer xmlSerializer
  • 如何从 C stdio.h getline() 替换/忽略无效的 Unicode/UTF8 字符?

    在Python上 有这个选项errors ignore 为了openPython函数 open filepath txt r encoding UTF 8 errors ignore 这样 读取包含无效 UTF8 字符的文件时 它们将被替换
  • 如何完全删除 Xcode 4

    我想删除所有现有的 SDK 版本以及 Xcode 4 Xcode 4 指南说要这样做 sudo Xcode4 Library uninstall devtools mode all 但我在这个位置没有 Xcode4 我看到它的唯一地方是 D
  • 如何正确重载 ostream 的 << 运算符? [复制]

    这个问题在这里已经有答案了 我正在用 C 编写一个用于矩阵运算的小型矩阵库 然而 我的编译器抱怨了 而以前却没有 这段代码被搁置了六个月 在这期间我将我的计算机从Debian 4 0 蚀刻 至Debian 5 0 莱尼 g Debian 4
  • Flexbox/浮动 - 2 1 2 布局

    我正在尝试使用 Flexbox 或浮动创建 2 1 2 布局 如添加到此问题的图像中所示 有没有什么方法可以仅使用有序的项目列表成功地做到这一点 ul li 1 li li 2 li li 3 li li 4 li li 5 li ul 1
  • 将结构体数组从 C# 传递到 Delphi

    我正在使用罗伯特 吉塞克非托管导出 1 2 6 in VS2010我的目标是传递一个结构数组时间 2019 03 17 标签 c NET 3 5 to 德尔福 D7 我必须承认 我对delphi不太熟悉 我已经读过这个帖子 但建议的答案对我
  • 如何找到 Postgres 中所有表的行数

    我正在寻找一种方法来查找 Postgres 中所有表的行数 我知道我可以一次做一张桌子 SELECT count FROM table name 但我想查看所有表的行数 然后按其排序以了解我的所有表有多大 有三种方法可以得到这种计数 每种方