pg_tablespace_databases()
是一个系统函数,用于列出在指定表空间中包含对象的数据库的OID。
pg_tablespace_databases()
在PostgreSQL 8.0中添加。
用法
pg_tablespace_databases()
必须提供要查询的表空间的OID(请注意,目前没有 regtablespace OID 类型),并返回数据库OID列表,可以将其与pg_database
联接以获取数据库名称。请参见下面的示例。
目前,PostgreSQL 本身或其任何客户端实用程序都没有使用pg_tablespace_databases()
。
pg_tablespace_databases()
在准备删除表空间(使用DROP TABLESPACE
)时很有用,因为只有当表空间不包含任何数据库的任何对象时,才能执行该命令。
更改历史记录
- PostgreSQL 8.0
- 添加(提交0b89d261)
示例
列出tblspace_1
中包含对象的全部数据库
postgres=# SELECT d.datname FROM pg_database d, ( SELECT pg_tablespace_databases(oid) AS datoid FROM pg_tablespace t WHERE t.spcname='tblspace_1' ) t WHERE t.datoid = d.oid; datname ---------- testdb postgres (2 rows)
列出全部表空间并显示哪些数据库在其中包含对象
postgres=# SELECT t.spcname AS "Tablespace", array_to_string( ARRAY( ( SELECT datname FROM pg_database WHERE oid IN ( SELECT pg_tablespace_databases(t.oid) AS datoid ) ORDER BY 1 ) ), ',' ) AS "Database(s)" FROM pg_tablespace t WHERE t.spcname != 'pg_global' ORDER BY 1; Tablespace | Database(s) ------------+------------------------------------- pg_default | postgres,testdb,template0,template1 tblspace_1 | postgres,testdb tblspace_2 | (3 rows)
注意:pg_global
被忽略,因为根据定义它不能包含数据库数据,并且包含它会导致发出以下警告
WARNING: global tablespace never has databases
参考文献
- PostgreSQL 文档: 系统目录信息函数