更改資料庫位置

我們可以在一個非預設位置創建資料庫(資料庫的預設位置是安裝路徑)。因為任何資料庫的訪問實際上都是通過資料庫後端進行的,所以資料庫的任何具體的路徑必須是後端可以訪問的(也就是資料庫超級用戶有讀寫權限)。

可選的資料庫位置是通過環境變數來創建和引用的,這個環境變數給出指定儲存位置的絕對路徑。這個聲明資料庫位置的環境變數必須在後端運行前聲明,並且它指向的位置必須為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.