如何获取Postgres当前的可用磁盘空间?

2024-05-23

在开始在数据库中进行某些工作之前,我需要确保至少有 1Gb 的可用磁盘空间。我正在寻找这样的东西:

select pg_get_free_disk_space();

是否可以? (我在文档中没有找到任何相关内容)。

PG:9.3 & 操作系统:Linux/Windows


PostgreSQL 目前不具备直接公开磁盘空间的功能。

一方面,哪个磁盘?生产 PostgreSQL 实例通常如下所示:

  • /pg/pg94/:WB 模式下 BBU RAID 控制器上快速可靠存储的 RAID6,用于目录和最重要的数据
  • /pg/pg94/pg_xlog:快速可靠的 RAID1,用于事务日志
  • /pg/tablespace-lowredundancy:快速廉价的 RAID10 存储,用于索引和UNLOGGED您不关心丢失的表,因此您可以使用较低冗余的存储
  • /pg/tablespace-bulkdata:RAID6 或类似的慢速近线磁存储,用于旧的审核日志、历史数据、主要写入数据以及其他访问速度较慢的内容。
  • postgreSQL 日志通常又在其他地方,但如果填满,系统可能仍会停止。其中取决于许多配置设置,其中一些您根本无法从 PostgreSQL 中看到,例如 syslog 选项。

然后,“可用”空间并不一定意味着 PostgreSQL 可以使用它(想想:磁盘配额、系统保留的磁盘空间),而且可用空间blocks/bytes并不是唯一的限制,因为许多文件系统也对文件(索引节点)数量有限制。

一个如何SELECT pg_get_free_disk_space()报告这个?

了解可用磁盘空间可能是一个安全问题。如果支持的话,它至少只会暴露给超级用户。

你什么can要做的是使用不受信任的过程语言,例如plpythonu进行操作系统调用来询问主机操作系统的磁盘空间信息,使用针对pg_catalog.pg_tablespace并使用data_directory设置从pg_settings发现 PostgreSQL 在主机操作系统上保存内容的位置。您还必须检查安装点 (unix/Mac) / 连接点 (Windows) 以发现是否pg_xlog等都在单独的存储中。不过,这仍然无法真正帮助您获得日志空间。

我很想有一个SELECT * FROM pg_get_free_diskspace报告了主要的 datadir 空间,以及其中的任何安装点或连接点,例如pg_xlog or pg_clog,并报告每个表空间及其中的任何安装点。它是一个返回集合的函数。足够关心的人一定会费心去实施它适用于所有目标平台不过,现在没有人想要足够的钱来完成这项工作。


同时,如果您愿意简化您的需求:

  • 一个文件系统
  • 目标操作系统与 UNIX/POSIX 兼容,如 Linux
  • 没有启用配额系统
  • 没有根保留块百分比
  • 索引节点耗尽不是问题

然后你可以CREATE LANGUAGE plpython3u; and CREATE FUNCTION a LANGUAGE plpython3u函数执行如下操作:

import os
st = os.statvfs(datadir_path)
return st.f_bavail * st.f_frsize

在一个函数中returns bigint并且要么采取datadir_path作为参数,或者通过执行 SPI 查询来发现它,例如SELECT setting FROM pg_settings WHERE name = 'data_directory'来自 PL/Python 内部。

如果您也想支持 Windows,请参阅使用 python 计算卷上剩余的跨平台空间 https://stackoverflow.com/q/51658/398670。不过,我会使用 Windows 管理接口 (WMI) 查询,而不是使用 ctypes 来调用 Windows API。

或者你可以使用某人用 PL/Perlu 编写的这个函数 https://wiki.postgresql.org/wiki/Free_disk_space使用df and mount命令输出解析,这可能只适用于 Linux,但是,嘿,它是预先写好的。

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

如何获取Postgres当前的可用磁盘空间? 的相关文章

随机推荐

  • C++ 内部如何存储引用? [复制]

    这个问题在这里已经有答案了 我只是想知道 引用是如何内部存储的 我觉得深入了解该级别将使我更好地理解指针与引用的概念并做出决策选择 我怀疑它的工作原理基本上与指针相同 但编译器负责处理指针 请指教 根本不要求以任何方式 存储 引用 就语言而
  • Microsoft.Bcl.Async 中是否有 ExceptionDispatchInfo 的类似物?

    有没有类似的ExceptionDispatchInfo http msdn microsoft com en us library system runtime exceptionservices exceptiondispatchinfo
  • 如何编写不返回任何内容的 postgres 存储过程?

    如何在 postgres 中编写一个根本不返回值的简单存储过程 即使使用 void 返回类型 当我调用存储过程时 我也会返回一行 CREATE FUNCTION somefunc in id bigint RETURNS void AS B
  • 最佳开源混合整数优化求解器[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在使用 CPLEX 来解决巨大的优化模型 超过 100k 个变量 现在我想看看是否可以找到开源替代
  • 在 iPhone 上下载、保存和播放 mp3

    我想从某个网站下载 mp3 文件 将其保存到我的 CoreData 模型 AudioMp3 中 然后播放 下面的函数可以工作 但首先 效率低下 因为它必须首先将 mp3 保存到文件 其次 它在接下来的调用次数中重复播放相同的 mp3 我认为
  • 定位精度定义 - iOS

    iOS 上返回的 准确性 或 不确定性 的统计意图是什么 即使是近似值 例如 Android 文档对其返回的精度数字进行了解释 从这个意义上讲 它大约是一个标准差 我们将准确度定义为 68 置信度的半径 换句话说 如果 您以该位置的纬度和经
  • SqlConnection - 是远程连接还是本地连接?

    如果我有 SqlConnection 对象 如何确定它是本地连接 localhost 或 127 0 0 1 还是远程连接 本地区域的其他计算机 使用连接询问 SQL 语句 SELECT SERVERNAME 然后验证这是否与客户端计算机的
  • 尽管遵循安装说明,Beaker 仍无法找到 Python 和 Julia 安装

    我最近安装了 Beaker Notebook 但无法启动 Python 我已经安装了 Python 它是使用 Anaconda 安装的 实际上推荐用于 Beaker 我已经编辑过beaker pref json指向我的安装 见下文 但它无法
  • SonarQube 不收集代码覆盖率

    我在使用 sonar runner 和 jacoco 设置 gradle 时遇到问题 除了代码覆盖率之外 一切都很好 我已经尝试了一切但没有结果 这是我的 build gradle 文件 apply from dependencies gr
  • 防止应用程序在控制台关闭时退出

    I use AllocConsole 在 winform 应用程序中打开控制台 如何防止应用程序在控制台关闭时退出 EDIT 不时更新的完成百分比是我想在控制台中显示的 void bkpDBFull PercentComplete obje
  • PHP-MySQLi 连接随机失败并显示“无法分配请求的地址”

    大约两周以来 我一直在处理 LAMP 堆栈中最奇怪的问题之一 长话短说 与 MySQL 服务器的随机连接失败并显示错误消息 Warning mysqli real connect HY000 2002 Cannot assign reque
  • NSIndexpath.item 与 NSIndexpath.row

    有谁知道之间的区别NSIndexpath row and NSIndexpath item 具体来说 我在以下情况中使用哪一个 UITableViewCell tableView UITableView tableView cellForR
  • 从枚举参数推断 Typescript 函数返回类型

    我想创建一个加载服务 为枚举中定义的 ID 返回正确类型的数据 我所做的看起来像这样 enum IdentifierEnum ID1 ID1 ID2 ID2 interface DataType IdentifierEnum ID1 num
  • 从 React-Navigation V4 - V5 迁移到 CommonActions.init 和 router.getStateForAction 发生了什么?

    我们的应用程序使用CommonActions init 并将其传递给router getStateForAction 我这里有两个问题 the init 功能不再在CommonActions the router getStateForAc
  • “如何判断 Python 中的字符串是否重复?”的更复杂版本

    我正在读书这个帖子 https stackoverflow com questions 29481088 how can i tell if a string repeats itself in python我想知道是否有人可以找到将重复的
  • Rails:使用水豚填充动态字段

    我有一个通过 javascript 动态创建的带有长 id 的文本字段 user user skills attributes 69878013874980 skill title 哪里的69878013874980是生成的时间戳 如何在水
  • 如何在 Netbeans 工具栏中创建自定义按钮?

    我有一个命令行脚本 保存在我的电脑上的一个文件中 如何在 NB 7 0 中创建工具栏按钮 以便单击此按钮将运行我保存的脚本 另外 我应该将脚本文件命名为什么文件扩展名 以便它可以执行 或者这很重要吗 这里有一个工具栏按钮教程 http pl
  • [\b] 退格正则表达式有什么用?

    b 显然匹配退格字符 我无法理解字符串如何包含退格字符 有人能给我一个具体的例子来说明如何使用它吗 非常感谢 虽然所有其他人总体上都是正确的 即 b是单词边界 b does表示字符类中的退格键 b 这确实会匹配退格字符 它只是一个可以出现在
  • “第一类对象”是什么意思?

    In a 最近的问题 https stackoverflow com questions 700684 content ideas for a short javascript lesson 我收到了一些建议 其中包括讨论 JavaScri
  • 如何获取Postgres当前的可用磁盘空间?

    在开始在数据库中进行某些工作之前 我需要确保至少有 1Gb 的可用磁盘空间 我正在寻找这样的东西 select pg get free disk space 是否可以 我在文档中没有找到任何相关内容 PG 9 3 操作系统 Linux Wi