?
本文檔使用
php中文網(wǎng)手冊(cè) 發(fā)布
CREATE DATABASE name [ [ WITH ] [ OWNER [=] user_name ] [ TEMPLATE [=] template ] [ ENCODING [=] encoding ] [ LC_COLLATE [=] lc_collate ] [ LC_CTYPE [=] lc_ctype ] [ TABLESPACE [=] tablespace ] [ CONNECTION LIMIT [=] connlimit ] ]
CREATE DATABASE創(chuàng)建一個(gè)新PostgreSQL數(shù)據(jù)庫(kù)。
要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)庫(kù),你必須是一個(gè)超級(jí)用戶或者有特殊的CREATEDB權(quán)限。 參閱CREATE USER。
通常,創(chuàng)建者將成為新數(shù)據(jù)庫(kù)的管理員。 超級(jí)用戶可以用OWNER子句創(chuàng)建其它用戶所有的數(shù)據(jù)庫(kù)。 甚至可以創(chuàng)建沒(méi)有特殊權(quán)限的用戶所擁有的數(shù)據(jù)庫(kù)。 有CREATEDB權(quán)限的非超級(jí)用戶使用只能創(chuàng)建自己使用的數(shù)據(jù)庫(kù)。
缺省時(shí),新數(shù)據(jù)庫(kù)將通過(guò)克隆標(biāo)準(zhǔn)系統(tǒng)數(shù)據(jù)庫(kù)template1來(lái)創(chuàng)建。 可以通過(guò)TEMPLATE name指定不同的模板。 尤其是,用TEMPLATE template0創(chuàng)建一個(gè)很純凈的、 只包括PostgreSQL預(yù)定義的標(biāo)準(zhǔn)對(duì)象的數(shù)據(jù)庫(kù)。 這個(gè)方法可以避免把任何已經(jīng)加入到template1里的本地安裝對(duì)象拷貝到新數(shù)據(jù)庫(kù)。
要?jiǎng)?chuàng)建的數(shù)據(jù)庫(kù)名字
數(shù)據(jù)庫(kù)用戶的名字,他將擁有新數(shù)據(jù)庫(kù), 或者是寫(xiě)DEFAULT使用缺省用戶(也就是執(zhí)行命令的用戶)。
模板名(從哪個(gè)模板創(chuàng)建新數(shù)據(jù)庫(kù)),或者用DEFAULT 使用缺省模板(template1)。
創(chuàng)建新數(shù)據(jù)庫(kù)使用的字符編碼。可以使用文本名字(例如'SQL_ASCII'、 整數(shù)編號(hào)、DEFAULT(模版數(shù)據(jù)庫(kù)的編碼)。 PostgreSQL服務(wù)器支持的字符集 在Section 22.2.1里描述。額外的限制參見(jiàn)下文。
用于新數(shù)據(jù)庫(kù)的對(duì)照順序(LC_COLLATE)。 這影響到應(yīng)用到字符串的排序順序,例如:在有ORDER BY的查詢中,以及用于 文本列的索引的順序。在默認(rèn)情況下,使用模板數(shù)據(jù)庫(kù)的排序順序。 請(qǐng)看以下附加的限制。
用于新數(shù)據(jù)庫(kù)的字符分類(LC_CTYPE)。這影響字符的分類,例如: 小寫(xiě)、大寫(xiě)和數(shù)字。默認(rèn)情況下使用模板數(shù)據(jù)庫(kù)的字符分類。 請(qǐng)看以下附加的限制。
和新數(shù)據(jù)庫(kù)關(guān)聯(lián)的表空間名字, 或者用DEFAULT表示模版數(shù)據(jù)庫(kù)的表空間。 這個(gè)表空間將成為在這個(gè)數(shù)據(jù)庫(kù)里創(chuàng)建的對(duì)象的缺省表空間。 參閱CREATE TABLESPACE獲取更多信息。
數(shù)據(jù)庫(kù)可以接受多少并發(fā)的連接。-1(缺省)意味著沒(méi)有限制。
可選參數(shù)可以按任意順序書(shū)寫(xiě),而不僅僅是上面顯示的順序。
CREATE DATABASE不能在事務(wù)塊里面執(zhí)行。
類似"could not initialize database directory"這樣的錯(cuò)誤 最有可能是因?yàn)閿?shù)據(jù)目錄的權(quán)限不夠或者磁盤(pán)滿之類的文件系統(tǒng)問(wèn)題。
使用DROP DATABASE刪除一個(gè)數(shù)據(jù)庫(kù)。
程序createdb是這個(gè)命令的封裝,使用更加方便。
參閱 Section 21.3獲取更多詳細(xì)信息。 盡管可以通過(guò)把某數(shù)據(jù)庫(kù)名聲明為模板(而非template1), 但是這(還)不是一個(gè)通用的"COPY DATABASE"功能。 主要的限制是在從模版復(fù)制的時(shí)候不允許有其它會(huì)話鏈接到模版數(shù)據(jù)庫(kù)上。 如果在開(kāi)始執(zhí)行CREATE DATABASE的時(shí)候有其它會(huì)話正連接在模版數(shù)據(jù)庫(kù)上,那么將會(huì)失?。? 否則直到CREATE DATABASE完成之后才允許建立新的會(huì)話連接。 參見(jiàn)Section 21.3獲取更多信息。
為一個(gè)新數(shù)據(jù)庫(kù)指定的字符集編碼必須兼容所選擇的區(qū)域環(huán)境設(shè)置 (LC_COLLATE和LC_CTYPE)。若區(qū)域設(shè)置為 C (或相當(dāng)于POSIX),那么所有的編碼都允許, 但是對(duì)于其他的區(qū)域設(shè)置,只有一個(gè)編碼能正常工作。(然而,在Windows系統(tǒng)中, UTF-8編碼可用于任何區(qū)域設(shè)置。)CREATE DATABASE將會(huì)允許超級(jí)用戶 來(lái)指定SQL_ASCII編碼而不計(jì)區(qū)域設(shè)置情況,這種做法是不宜采用的而且會(huì)導(dǎo)致 編碼不兼容區(qū)域設(shè)置的數(shù)據(jù)被存儲(chǔ)在數(shù)據(jù)庫(kù)中時(shí)字符串函數(shù)性能不良,。
編碼和區(qū)域設(shè)置必須匹配模板數(shù)據(jù)庫(kù),除了template0用作模板的時(shí)候。 這是因?yàn)槠渌麛?shù)據(jù)庫(kù)可能會(huì)包含不匹配指定編碼的數(shù)據(jù),或者可能包含排序順序受 LC_COLLATE和LC_CTYPE影響的索引。復(fù)制這些數(shù)據(jù)會(huì)導(dǎo)致 數(shù)據(jù)庫(kù)被新設(shè)置破壞。然而,template0公認(rèn)是不包含任何會(huì)受 到影響的數(shù)據(jù)或者索引的。
CONNECTION LIMIT選項(xiàng)只是近似地強(qiáng)制;如果兩個(gè)新的連接幾乎同時(shí)發(fā)起, 而只剩下一個(gè)連接"槽位"了,那么很可能兩個(gè)連接都失效。同樣,這個(gè)限制并不強(qiáng)加在超級(jí)用戶上。
創(chuàng)建一個(gè)新數(shù)據(jù)庫(kù):
CREATE DATABASE lusiadas;
創(chuàng)建一個(gè)由用戶salesapp擁有的數(shù)據(jù)庫(kù)sales,缺省表空間是 salesspace:
CREATE DATABASE sales OWNER salesapp TABLESPACE salesspace;
創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)music,支持ISO-8859-1字符集:
CREATE DATABASE music ENCODING 'LATIN1' TEMPLATE template0;
在這個(gè)例子中,TEMPLATE template0子句只在template1的編碼 不是ISO-8859-1時(shí)被請(qǐng)求。請(qǐng)注意:更改編碼可能也會(huì)需要選擇新的 LC_COLLATE和LC_CTYPE設(shè)置。
在SQL標(biāo)準(zhǔn)里沒(méi)有CREATE DATABASE語(yǔ)句。 數(shù)據(jù)庫(kù)等同于目錄,其創(chuàng)建是由實(shí)現(xiàn)決定的。