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