更改数据库位置

我们可以在一个非缺省位置创建数据库(数据库的缺省位置是安装路径).因为任何数据库的访问实际上都是通过数据库后端进行的,所以数据库的任何具体的路径必须是后端可以访问的(也就是数据库超级用户有读写权限).

可选的数据库位置是通过环境变量来创建和引用的,这个环境变量给出指定存储位置的绝对路径。这个声明数据库位置的环境变量必须在后端运行前声明,并且它指向的位置必须为postgres管理员帐户可写。有关预配置数据库位置的问题,请与你的节点数据库管理员商议。任何有效的环境变量名都可以用于引用一个可选路径,尽管我们建议使用带有“PGDATA”前缀的使用环境变量名以避免和其他变量冲突。

注意:在以前版本的 Postgres,还允许用一个绝对路径来声明一个可选的存储位置。尽管我们推荐使用环境变量的方法(因为这样可以令节点管理员在管理磁盘空间时更灵活)我们还是允许使用绝对路径的方法来声明一个可选的位置。管理员手册描述了如何打开这个特性。
从安全性和完整性角度出发,采用的任何路径或环境变量都有一些附加路径域附在后面.必须运行 initlocation 为更改数据库位置做准备.

要使用环境变量 PGDATA2 创建数据存储区(本例中设置为 /alt/postgres),确保 /alt/postgres 已经存在并且可以被 Postgres 管理员帐户写。然后在命令行上键入:

% initlocation PGDATA2
Creating Postgres database system directory /alt/postgres/data
Creating Postgres database system directory /alt/postgres/data/base
用下面的命令在命令行上在 PGDATA2 位置上创建存储区:
% createdb -D PGDATA2 mydb
在 psql 里实现这些的方法是键入:
=> CREATE DATABASE mydb WITH LOCATION = 'PGDATA2';
如果你没有创建数据库的权限,你将看到如下信息:
ERROR:  CREATE DATABASE: permission denied
如果声明的路径不存在或数据库后端没有读写该路径的权限,你将会看到如下信息:
ERROR:  The database path '/no/where' is invalid. This may be due to a character that is not allowed or because the chosen path isn't permitted for databases.