PostgreSQL表空间的位置存储在数据库的哪个位置?

14
我正在使用RedHat 6上的PostgreSQL 9.2版本。我正在寻找存储PostgreSQL表空间位置的数据库表和列。我以为它会在PG_TABLESPACE中,但是...
select * from pg_tablespace

显示...
postgres=# select * from pg_tablespace;
     spcname     | spcowner | spcacl | spcoptions
-----------------+----------+--------+------------
 pg_default      |       10 |        |
 pg_global       |       10 |        |
 C_TBL_DB91SABIR |       10 |        |
(3 rows)

但没有位置,有任何关于位置保存的想法吗?

1
“SHOW data_directory;” 将显示当前数据库的位置。 - Vivek S.
嗨@wingedpanther,那显示了PGDATA的位置,但我正在寻找表空间的目录,我想查询它,以便在删除表空间时脚本化删除物理文件夹。 - davegreen100
3
请尝试执行以下命令:select spcname, pg_tablespace_location(oid) from pg_tablespace;该命令会返回表空间的名称和对应的路径。 - Vivek S.
3个回答

37

使用pg_tablespace_location(tablespace_oid)(PostgreSQL 9.2+)获取文件系统中 tablespace 的路径。

您可以从 pg_tablespace 中获取 tablespaceoid,因此查询应该是:

select spcname
      ,pg_tablespace_location(oid) 
from   pg_tablespace;

1
这个 SQL 查询和 psql 命令 \db+ 都与用户定义或者所谓的非系统表空间相关。例如,在某些情况下,默认的 pgroot 是由环境变量 PGROOT 定义的。 - Mehme

7

另一个非常简单的命令来列出所有表空间

\db+

这将非常快速地提供您所有表空间的详细信息


-6
请使用以下查询语句获取表空间的名称和位置。
postgres=# select spcname ,pg_tablespace_location(oid) from pg_tablespace;
  spcname   |    pg_tablespace_location     
------------+-------------------------------
 pg_default | 
 pg_global  | 
 fastspace  | /var/lib/postgresql/data/base
 demotbs    | /var/lib/postgresql/data

5
重复已经存在的被接受答案有何意义? - Washington Guedes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接