sql – 如何在Postgres中获取当前的可用磁盘空间?
在开始在我的数据库中做一些工作之前,我需要确保我至少有1Gb的可用磁盘空间.我正在寻找这样的东西:
select pg_get_free_disk_space(); 可能吗? (我在docs中找不到任何关于它的内容). PG:9.3&操作系统:Linux / Windows 解决方法PostgreSQL目前没有直接暴露磁盘空间的功能.一方面,哪个磁盘?生产PostgreSQL实例通常如下所示: > / pg / pg94 /:WB模式下BBU RAID控制器上快速可靠存储的RAID6,用于目录和最重要的数据 然后就是“自由”空间并不一定意味着PostgreSQL可以使用它(想想:磁盘配额,系统保留磁盘空间),以及空闲块/字节不是唯一约束的事实,就像许多文件系统一样对文件数量(inode)也有限制. aSELECT pg_get_free_disk_space()如何报告此情况? 了解可用磁盘空间可能是一个安全问题.如果受到支持,那至少只会暴露给超级用户. 您可以做的是使用不受信任的过程语言(如plpythonu)来进行操作系统调用,以查询主机操作系统的磁盘空间信息,使用针对pg_catalog.pg_tablespace的查询并使用pg_settings中的data_directory设置来发现PostgreSQL在主机上保留内容的位置OS.您还必须检查挂载点(unix / Mac)/交接点(Windows)以发现pg_xlog等是否位于单独的存储上.但是,这仍然无法真正帮助您获取日志空间. 我非常希望有一个SELECT * FROM pg_get_free_diskspace报告主datadir空间,以及其中的任何挂载点或连接点,如pg_xlog或pg_clog,并且还报告每个表空间及其中的任何挂载点.这是一个回归功能.足够关心的人不得不费心去为所有目标平台实施它,而且现在,没有人希望它能够完成这项工作. 与此同时,如果您愿意将您的需求简化为: >一个文件系统 那么你可以创建语言plpython3u;和CREATE FUNCTION一个语言plpython3u函数,它可以执行以下操作: import os st = os.statvfs(datadir_path) return st.f_bavail * st.f_frsize 在返回bigint的函数中,或者将datadir_path作为参数,或者通过执行SPI查询来发现它,例如PL / Python中的SELECT设置FROM pg_settings WHERE name =’data_directory’. 如果您也想支持Windows,请参阅Cross-platform space remaining on volume using python.我使用Windows管理界面(WMI)查询而不是使用ctypes来调用Windows API. 或者您可以使用df和mount命令输出解析来执行此操作,这可能仅适用于Linux,但是,它是预先编写的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |