18.5. 可选的位置

我们可以不在缺省位置创建的数据库。但是要注意所有数据库访问发生在数据库服务器后端,因此声明的任何位置必须可以被后端访问。

可选数据库位置是通过环境变量引用的,环境变量里给出你想用的存储位置的绝对路径。 这个环境变量必须出现在服务器的环境里, 因此必须在后端启动之前定义。(这样,可选位置就可以在节点管理员的控制之下;而普通用户则无法修改它。) 任何有效的环境变量名都可以用于引用一个可选路径,尽管我们建议使用带有PGDATA前缀的环境变量名以避免和其他变量混淆或冲突。

要在服务器进程的环境里定义环境变量,你必须先停止服务器,然后定义变量, 初始化数据区,最后重新启动服务器。(又见Section 16.6Section 16.3。) 要设置环境变量,在 Bourne shell 系列里面键入

PGDATA2=/home/postgres/data
export PGDATA2

或者是在cshtcsh里面键入

setenv PGDATA2 /home/postgres/data

你必须确保这些环境变量总是在服务器环境中存在,否则你就不能访问数据库。 因此你可能会希望把它们设置在 shell 启动脚本文件或者服务器启动脚本里。

要使用环境变量PGDATA2创建数据存储区,确信包容的目录,(在这里是/home/postgres) 已经存在并且可以被启动服务器的用户帐户写(参阅 Section 16.1)。然后在命令行上键入:

initlocation PGDATA2

不是initlocation $PGDATA2)。然后重新启动服务器。

要在新的位置创建一个数据库,使用下面命令

CREATE DATABASE name WITH LOCATION 'location'

这里 location 是你用的环境变量, 本例中是 PGDATA2createdb 命令有个选项 -D 做此用途.

在变更的位置创建的数据库可以象其他数据库一样访问和删除。

注意: 也可以直接给 CREATE DATABASE 命令声明一个绝对路径而不需要定义环境变量。 缺省时这是不允许的,因为有安全风险。 要允许这么做,你必须带着 C 预编译宏ALLOW_ABSOLUTE_DBPATHS 编译PostgreSQL。你可以这么干:

gmake CPPFLAGS=-DALLOW_ABSOLUTE_DBPATHS all