数据库中存储的 postgres 表空间的位置

Posted

技术标签:

【中文标题】数据库中存储的 postgres 表空间的位置【英文标题】:Where in the DB is the Location of a postgres tablespace stored 【发布时间】:2016-02-05 10:32:44 【问题描述】:

我在 redhat 6 上使用 postgres 9.2

这应该很简单,但我在任何地方都找不到。我正在寻找存储 postgres 表空间位置的数据库表和列,我认为它会在 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)

但没有位置,有什么想法保存位置吗?

谢谢

【问题讨论】:

不是确切的答案:SHOW data_directory; 会告诉你当前数据库的位置 嗨@wingedpanther,它显示了 PGDATA 位置,但我正在寻找表空间的目录,我想查询它,以便我可以在表空间被删除时编写删除物理文件夹的脚本丢弃。 试试这个select spcname, pg_tablespace_location(oid) from pg_tablespace; 【参考方案1】:

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

您将从pg_tablespace 获得tablespace 中的oid,因此查询应该是

select spcname
      ,pg_tablespace_location(oid) 
from   pg_tablespace;

【讨论】:

【参考方案2】:

另一个列出所有表空间的超级简单命令

\db+

这将很快为您提供所有表空间详细信息

【讨论】:

【参考方案3】:

使用以下查询获取表空间名称表空间位置。

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

【讨论】:

复制已经接受的答案有什么意义?

以上是关于数据库中存储的 postgres 表空间的位置的主要内容,如果未能解决你的问题,请参考以下文章

表空间缓冲池

DB2数据库中的表在硬盘上的存储位置在哪?

数据结构 之 线性表

表空间及回收

MySQL 存储引擎

《数据结构 - 线性表》链式存储 (单链表)