18.2. 創建數據庫

為了創建和刪除數據庫, 必須先運行PostgreSQL服務器(參閱 Section 16.3).

數據庫是用 SQL 命令CREATE DATABASE創建的: CREATE DATABASE

CREATE DATABASE name;

這裡的 name 遵循SQL標識符的一般規則。 當前用戶自動成為此新數據庫的所有者。同時,以後刪除這個數據庫也是這個用戶的特權(同時還會刪除其中的所有對象, 即使那些對象有不同的所有者也這樣。)

創建數據庫是一個有限制的操作.參閱 Section 17.2 獲取如何賦權限的信息。

因為你需要與數據庫服務器聯接才能執行命令CREATE DATABASE, 那麼還有一個問題是任意節點的第一個數據庫是怎樣創建的? 第一個數據庫總是由initdb命令在初始化數據存儲區的時候創建的。 (參閱Section 16.2。)這個數據庫叫template1而且不能被刪除。 因此要創建第一個"真正"的數據庫的時候你可以與template1聯接.

template1的名字可不是隨便取的,當創建一個新的數據庫時, 實際上就是克隆了(復制)了模板數據庫。 這就意味著你對template1做的任何修改都會傳播到所有隨後創建的數據庫。 這就意味著說你不能把模板數據庫用于真正的工作中, 但是如果明智地使用這個特性,那它可以帶來許多方便。 更多細節見Section 18.3。(譯注:比如增加用戶定義函數等等.)

另外,為了更方便一些,你還可以用一個可以在 shell 中執行的程序來創建新數據庫,createdb

createdb dbname

createdb 沒變什麼魔術,它和template1連接並執行 CREATE DATABASE 命令。 createdb 的手冊頁包含使用它的細節。尤其是不帶任何參數調用 createdb 將以當前用戶名為名稱創建數據庫, 這可能是也可能不是你要的。

注意: Chapter 19 包含有關如何限制某個用戶可以連接的數據庫的信息。

有時候你想為其他什麼人創建一個數據庫。那個用戶應該成為新數據庫的所有者,這樣他就可以自己配置和管理這個數據庫。要實現這個目標, 使用下列命令中的某一條:

CREATE DATABASE dbname OWNER username;

上面的是在 SQL 環境中,或者是

createdb -O username dbname

要想為其他用戶創建一個數據庫,你自己必須是數據庫的超級用戶。