我一直在努力让我们的数据库客户端积极主动地不填满他们使用的数据库所在的分区。
由于我们所有的客户端都与数据库管理器位于同一主机上,因此对于用户创建的表空间应该很容易;客户端可以查找表空间的文件系统路径(在 spclocation 中),并使用操作系统调用来检查有多少可用空间:
adb=> select * from pg_tablespace;
spcname | spcowner | spclocation | spcacl
------------+----------+-------------------+---------------------
pg_default | 10 | |
pg_global | 10 | |
adb | 2033793 | /database/adb | {adb=C/adb}
我看不到如何从客户端获取存储全局表空间的路径;在上面的查询中为它返回一个空字符串。
不幸的是,我们在该领域有许多遗留系统使用在全局表空间中创建的特定数据库,将其移动到用户创建的表空间中将是一项巨大的努力。
希望我只是错过了一些非常简单的东西。