61

我在我的 postgresql 服务器中托管了 50 多个数据库。我需要将其中一些移动到另一台主机上,以释放一些磁盘空间,但是如何测量我的卷上每个数据库使用的磁盘空间?

是否有任何功能可以获取我想要的信息?

4

5 回答 5

89
SELECT pg_database_size('geekdb')

或者

SELECT pg_size_pretty(pg_database_size('geekdb'))

http://www.thegeekstuff.com/2009/05/15-advanced-postgresql-commands-with-examples/

于 2013-01-15T20:35:11.980 回答
40

您可以使用 postgresql 元命令:

  • \l将列出数据库
  • \l+使用大小、表空间、描述扩展列表。

用于\?获取元命令的完整列表。另见: https ://www.postgresql.org/docs/9.5/static/app-psql.html

于 2016-07-23T08:04:06.530 回答
5

这是一个老问题,但我创建了一种方法来df -h通过 sql 查询查看 linux 命令(文件系统、大小、使用、Avail、Use%、Mounted on)的结果,因此您的可用磁盘空间和总可用磁盘空间给定的文件系统。不完全是什么问题,但对一些使用/我有帮助。我希望这个答案是几个小时前就在这里,所以我把它放在这里(仅限 Linux):

像这样创建一个 cron 作业:

@hourly df -h | awk '{print $1","$2","$3","$4","$5","$6}' > /pathhere/diskspaceinfo.csv`

创建要查询的外部表:

create extension file_fdw;

create server logserver FOREIGN DATA WRAPPER file_fdw;

CREATE FOREIGN TABLE diskspaceinfo 
(file_sys text, size text, used text, avail text, used_pct text, mount text) 
SERVER fileserver 
OPTIONS (filename '/pathhere/diskspaceinfo.csv', format 'csv');

然后像这样查询你的表:

select * from diskspaceinfo

如果您只想要特定的东西,当然只需过滤表格以获得您想要的东西。它有局限性,但对我非常有用。

如果你有plperlu,你可以使用这个功能: https ://wiki.postgresql.org/wiki/Free_disk_space

一个有用的链接: https ://wiki.postgresql.org/wiki/Disk_Usage

于 2017-10-13T19:26:21.093 回答
2

喜欢登山者的回答。我调整了 cron 以返回字节并删除标题行,如下所示。

* * * * * df -B1 | tail -n+2 | awk '{print $1","$2","$3","$4","$5","$6}' > /var/www/diskspaceinfo.csv
于 2019-10-03T16:20:21.053 回答
1

执行以下查询以显示服务器中每个数据库的大小。

SELECT datname as db_name, pg_size_pretty(pg_database_size(datname)) as db_usage FROM pg_database;

注意:这是基于接受的答案,但不必为每个数据库运行一个查询节省了时间。

于 2022-02-14T11:15:42.277 回答