?
This document uses PHP Chinese website manual Release
為了創(chuàng)建和刪除數(shù)據(jù)庫,必須先運(yùn)行PostgreSQL服務(wù)器(參閱Section 17.3)。
數(shù)據(jù)庫是用SQL命令CREATE DATABASE創(chuàng)建的:
CREATE DATABASE name;
; 這里的name遵循SQL標(biāo)識(shí)符的一般規(guī)則。 當(dāng)前角色自動(dòng)成為此新數(shù)據(jù)庫的所有者。同時(shí),以后刪除這個(gè)數(shù)據(jù)庫也是這個(gè)用戶的特權(quán) (同時(shí)還會(huì)刪除其中的所有對(duì)象,即使那些對(duì)象有不同的所有者也這樣)。
創(chuàng)建數(shù)據(jù)庫是一個(gè)有限制的操作。參閱節(jié)Section 20.2獲取如何賦予權(quán)限的信息。
因?yàn)槟阈枰c數(shù)據(jù)庫服務(wù)器連接才能執(zhí)行CREATE DATABASE命令, 那么還有一個(gè)問題是第一個(gè)數(shù)據(jù)庫是怎樣創(chuàng)建的?第一個(gè)數(shù)據(jù)庫總是由initdb命令 在初始化數(shù)據(jù)存儲(chǔ)區(qū)的時(shí)候創(chuàng)建的(參閱Section 17.2)。這個(gè)數(shù)據(jù)庫叫postgres而且不能被刪除。 因此要?jiǎng)?chuàng)建第一個(gè)"真正"的數(shù)據(jù)庫時(shí)你可以與postgres連接。
initdb 也會(huì)同時(shí)創(chuàng)建名為template1,的數(shù)據(jù)庫。在創(chuàng)建一個(gè)新的數(shù)據(jù)庫時(shí), 實(shí)際上就是克隆(復(fù)制)了數(shù)據(jù)庫。這就意味著你對(duì)template1所做的任 何修改都會(huì)在所有隨后創(chuàng)建的數(shù)據(jù)庫中體現(xiàn)出來。因此把模板數(shù)據(jù)庫用于實(shí)際工作中并不明智, 但是如果有意地使用這個(gè)特性,那它可以帶來許多方便(譯注:比如增加用戶定義函數(shù)等等)。 更多細(xì)節(jié)見節(jié)Section 21.3。
另外,為了方便,你還可以用程序來創(chuàng)建新數(shù)據(jù)庫:
createdb dbname
createdb和postgres數(shù)據(jù)庫連接并執(zhí)行CREATE DATABASE命令。 createdb的手冊(cè)頁包含使用它的細(xì)節(jié)。尤其是不帶任何參數(shù)調(diào)用createdb時(shí)將創(chuàng)建與當(dāng)前用戶名同名的數(shù)據(jù)庫。
Note: Chapter 19包含有關(guān)如何限制哪些用戶可以連接某個(gè)特定數(shù)據(jù)庫的信息。
有時(shí)候你需要為其它人創(chuàng)建一個(gè)數(shù)據(jù)庫,并且使其成為新數(shù)據(jù)庫的所有者, 這樣他就可以自己配置和管理這個(gè)數(shù)據(jù)庫。要實(shí)現(xiàn)這個(gè)目標(biāo),使用下列命令中的一條:
CREATE DATABASE dbname OWNER rolename;
;
createdb -O rolename dbname
前者用于SQL環(huán)境,后者用于命令行。只有數(shù)據(jù)庫的超級(jí)用戶才能為其它用戶創(chuàng)建數(shù)據(jù)庫。