10.2. 更改数据库位置

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

可选的数据库位置是通过环境变量来创建和引用的, 这个环境变量给出指定存储位置的绝对路径。 这个声明数据库位置的环境变量必须在后端运行 前声明,并且它指向的位置必须为 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.