您的位置:首页 > 数据库

【Windows-PostgreSQL】PostgreSQL数据库迁移涉及到的表空间的问题

2014-12-30 14:19 316 查看
要迁移数据库的数据文件到其他目录下,停止PostgreSQL服务,移动data目录到目的地后,修改对应的conf配置文件的数据目录参数为新的目录,启动PostgreSQL服务,出现错误,提示不能启动。纠结此问题很长时间,在文档中发现了数据库的表空间是记录在postgres这个系统数据库中的。

说到这里,就要再简单讲一下表空间的概念了。表空间就是一个简单的目录,其主要用途分两个:

1.单独扩展表空间用,一旦磁盘或分区被耗尽,可以创建一个表空间到其他磁盘或分区上面。

2.区分不同对象的存储位置,比如可将索引放入较快磁盘的表空间上,而将固定不变的数据放入较慢磁盘的表空间上。

与Oracle数据库中的表空间被独占不同,PostgreSQL的表空间是可以被共享的。

当创建了一个表空间后,这个表空间可以被多个数据库、表、索引等数据库对象使用。达到对象的分离与归类的目的。

在PostgreSQL中有两个系统自建表空间:pg_global和pg_default。

前者是系统全局表空间,存储了关键的共享系统目录。后者是系统全局表空间,存储了关键的共享系统目录。

后者是系统默认表空间,可通过set default tablespace=tablespacename来指定为其他表空间,在建立数据库、表、索引等数据库对象时,若不指定表空间参数,则系统自动将对象创建到默认表空间中。如create table tt(id int) tablespace space1.该语句等价于set default tablespace=space1;create table tt(id int);

tablespace的记录存储在系统数据库postgrse的pg_tablspace表中,可以使用命令/db 或者sql语句select * from pg_tablespace命令查看。

                   List of tablespaces

   Name    |  Owner   |             Location

-----------+----------+-----------------------------------

pg_default  | postgres  |

pg_global    | postgres   |

ts_licai         | kanon       | D:/PostgreSQL90/TableSpc/ts_licai

这样,对于移动数据目录到其他位置后,要如何修改表空间也就了然了:需要修改pg_tablspace这个表内对应的表空间的Location字段为新的位置后,重启数据库。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: