pg_tablespace_databases()

一个列出包含指定表空间中对象的数据库的 OID 的系统函数

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)时很有用,因为只有当表空间不包含任何数据库的任何对象时,才能执行该命令。

更改历史记录

示例

列出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

分类

系统函数表空间

另请参阅

表空间pg_tablespace_size()pg_tablespace_location()

反馈

提交任何关于 "pg_tablespace_databases()" 的评论、建议或更正 此处