第三十章. 磁盘管理

改变(存储)位置

我们可以把数据库创建到非安装缺省位置进行存储.要记住所有数据库访问实际上是发生在数据库后端的,所以我们声明的任何位置都必须可被后端访问.

可替换的数据库位置是通过环境变量创建和引用的,该变量给出准备使用的存储位置的绝对路径。此环境变量必须在后端启动之前定义而且该路径必须为 postgres 管理员帐户可写。尽管我们建议使用前缀是 PGDATA 的变量名以避免与其他变量冲突,但实际上任何有效的环境变量名称都可以用于引用一个可替换的位置。

注意:以前版本的 Postgres 还允许使用一个绝对路径名来声明一个可替换的存储位置。更好的办法是采用环境变量风格的声明方式,因为这样就允许节点管理员在管理磁盘存储时更灵活。如果你喜欢用绝对路径,你可以通过定义 "ALLOW_ABSOLUTE_DBPATHS" 然后重新编译 Postgres 来实现这个目的。要定义该宏,你可以把下面这行
#define ALLOW_ABSOLUTE_DBPATHS 1
加到文件 src/include/config.h,或者在你的 Makefile.custom 里声明
 CFLAGS+= -DALLOW_ABSOLUTE_DBPATHS
要记住所有数据库访问实际上是发生在数据库后端的。因此,任何声明一个可替换位置的环境变量都必须在后端启动之前定义。要用 PGDATA2 (环境变量)定义一个指向 /home/postgres/data 的可替换位置,先键入
% setenv PGDATA2 /home/postgres/data
定义用于后继命令的环境变量。通常,你将希望把环境变量定义在 Postgres 超级用户的 .profile.cshrc 初始化文件里,以确保在系统起来以后它就已经定义了.任何有效的环境变量名称都可以用于引用一个可替换的位置,尽管我们建议使用前缀是 "PGDATA" 的变量名以避免混淆和与其他变量冲突或覆盖其他变量。

要在 PGDATA2 里创建一个数据存储区,确保 /home/postgres 已经存在而且可被 postgres 管理员写.然后在命令行上键入

% setenv PGDATA2 /home/postgres/data
% initlocation $PGDATA2
Creating Postgres database system directory /home/postgres/data

Creating Postgres database system directory /home/postgres/data/base

要测试新的位置,键入下面命令创建数据库 test
% createdb -D PGDATA2 test
% dropdb test