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 文档: 系统目录信息函数
