PostgreSQL 9.2: Remove the spclocation field from pg_tablespace

今天在 PostgreSQL9.2 测试版上做实验时发现了一奇怪现象,以前可以通过 pg_tablespace 系统表定位表空间对应的物理文件,而在 PostgreSQL9.2 版本不可以,后来查询了下 PostgreSQL9.2 Realease 才知道这个信息有变化。

PostgreSQL9.1 查询表空间

1
2
3
4
5
6
7
8
9
10
11
12
[postgres@pgb ~]$ psql  
psql (9.1.0)
Type "help" for help.
postgres=# select * from pg_tablespace;
spcname | spcowner | spclocation | spcacl | spcoptions
---------------+----------+-----------------------------------------------+--------+------------
pg_default | 10 | | |
pg_global | 10 | | |
tbs_mydb | 16384 | /database/pgdata1923_9.1/pg_tbs/tbs_mydb | |
tbs_skytf | 41818 | /database/pgdata1923_9.1/pg_tbs/tbs_skytf | |
tbs_skytf_idx | 41818 | /database/pgdata1923_9.1/pg_tbs/tbs_skytf_idx | |
(5 rows)

备注:pg_tablespace.spclocation 显示了表空间对应系统上的数据目录。

PostgreSQL9.2 beta1 查询表空间

1
2
3
4
5
6
7
8
9
10
[postgres@redhat6 ~]$ psql  
psql (9.2beta1)
Type "help" for help.
postgres=# select oid,* from pg_tablespace;
oid | spcname | spcowner | spcacl | spcoptions
-------+------------+----------+-----------------------------------------+------------
1663 | pg_default | 10 | |
1664 | pg_global | 10 | |
16385 | tbs_francs | 10 | {postgres=C/postgres,francs=C/postgres} |
(3 rows)

备注: PostgreSQL9.2 版的 pg_tablespace 上没有 spclocation 字段,当然查不到表空间对应的数据目录。

PostgreSQL9.2 beta1 的发行说明

Remove the spclocation field from pg_tablespace (Magnus Hagander)
This field was duplicative of the symbolic links already present in the data directory. This allows tablespace directories to be moved while the server is down. Also add pg_tablespace_location() to allow querying of the symbolic links.

备注:原来在 PostgreSQL9.2 版本中,spclocation 字段信息已经被去除了,同时在 9.2 版本中,提供函数 pg_tablespace_location() 查询表空间对应的数据目录。

PostgreSQL9.2 查询表空间目录

postgres=# /df pg_tablespace_location  
 List of functions  
 Schema | Name | Result data type | Argument data types | Type  
------------+------------------------+------------------+---------------------+--------  
pg_catalog | pg_tablespace_location | text | oid | normal  
(1 row)

postgres=# select pg_tablespace_location(16385);  
 pg_tablespace_location  
------------------------------------------  
/database/1922/pgdata1/pg_tbs/tbs_francs  
(1 row)

也可以通过元子命令查询

postgres=# /db  
 List of tablespaces  
 Name | Owner | Location  
------------+----------+------------------------------------------  
pg_default | postgres |  
pg_global | postgres |  
tbs_francs | postgres | /database/1922/pgdata1/pg_tbs/tbs_francs

参考

原创文章,作者:254126420,如若转载,请注明出处:https://blog.ytso.com/tech/database/237876.html

(0)
上一篇 2022年1月29日 22:30
下一篇 2022年1月29日 22:30

相关推荐

发表回复

登录后才能评论