PostgreSQL CREATE DATABASE

2021-09-09 10:17 更新

CREATE DATABASE — 創(chuàng)建一個(gè)新數(shù)據(jù)庫(kù)

大綱

CREATE DATABASE name    [ [ WITH ] [ OWNER [=] user_name ]           [ TEMPLATE [=] template ]           [ ENCODING [=] encoding ]
[ LOCALE [=] locale ]
[ LC_COLLATE [=] lc_collate ]
[ LC_CTYPE [=] lc_ctype ]
[ TABLESPACE [=] tablespace_name ]
[ ALLOW_CONNECTIONS [=] allowconn ]
[ CONNECTION LIMIT [=] connlimit ]
[ IS_TEMPLATE [=] istemplate ] ]

描述

CREATE DATABASE創(chuàng)建一個(gè)新的PostgreSQL數(shù)據(jù)庫(kù)。

要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)庫(kù),你必須是一個(gè)超級(jí)用戶或者具有特殊的CREATEDB特權(quán)。見CREATE ROLE。

默認(rèn)情況下,新數(shù)據(jù)庫(kù)將通過(guò)克隆標(biāo)準(zhǔn)系統(tǒng)數(shù)據(jù)庫(kù)template1被創(chuàng)建??梢酝ㄟ^(guò)寫TEMPLATE name 指定一個(gè)不同的模板。特別地,通過(guò)寫TEMPLATE template0你可以創(chuàng)建一個(gè)原始的數(shù)據(jù)庫(kù)(其中沒有用戶定義的對(duì)象存在并且系統(tǒng)對(duì)象沒有被更改),它將只包含你的PostgreSQL版本所預(yù)定義的標(biāo)準(zhǔn)對(duì)象。如果你希望避免拷貝任何可能被加入到template1中的本地安裝對(duì)象,這將有所幫助。

參數(shù)

name

要?jiǎng)?chuàng)建的數(shù)據(jù)庫(kù)名。

user_name

將擁有新數(shù)據(jù)庫(kù)的用戶的角色名,或者用DEFAULT來(lái)使用默認(rèn)值(即,執(zhí)行該命令的用戶)。要?jiǎng)?chuàng)建一個(gè)被另一個(gè)角色擁有的數(shù)據(jù)庫(kù),你必須是該角色的一個(gè)直接或間接成員,或者是一個(gè)超級(jí)用戶。

template

要從其創(chuàng)建新數(shù)據(jù)庫(kù)的模板名稱,或者用DEFAULT來(lái)使用默認(rèn)模板(template1)。

encoding

要在新數(shù)據(jù)庫(kù)中使用的字符集編碼。指定一個(gè)字符串常量(例如'SQL_ASCII'),或者一個(gè)整數(shù)編碼編號(hào),或者DEFAULT來(lái)使用默認(rèn)的編碼(即,模板數(shù)據(jù)庫(kù)的編碼)。PostgreSQL服務(wù)器所支持的字符集在第 23.3.1 節(jié)中描述。附加限制見下文。

locale

這是一個(gè)同時(shí)設(shè)置LC_COLLATELC_CTYPE的快捷方式。 如果指定此參數(shù),您不能指定這些參數(shù)中的任何一個(gè)。

提示

其他語(yǔ)言環(huán)境設(shè)置 lc_messages, lc_monetary, lc_numeric, and lc_time不是每個(gè)數(shù)據(jù)庫(kù)固定的, 也不是由該命令設(shè)置的。 如果要將它們?cè)O(shè)置為特定數(shù)據(jù)庫(kù)的默認(rèn)值,則可以使用 ALTER DATABASE... SET.

lc_collate

要在新數(shù)據(jù)庫(kù)中使用的排序規(guī)則順序(LC_COLLATE)。這會(huì)影響應(yīng)用到字符串的排序順序,例如在帶 ORDER BY 的查詢中,以及文本列上索引所使用的順序。默認(rèn)是使用模板數(shù)據(jù)庫(kù)的排序規(guī)則順序。附加限制見下文。

lc_ctype

要在新數(shù)據(jù)庫(kù)中使用的字符分類(LC_CTYPE)。這會(huì)影響字符的類別,如小寫、大寫和數(shù)字。默認(rèn)是使用模板數(shù)據(jù)庫(kù)的字符分類。附加限制見下文。

tablespace_name

將與新數(shù)據(jù)庫(kù)相關(guān)聯(lián)的表空間名稱,或者DEFAULT來(lái)使用模板數(shù)據(jù)庫(kù)的表空間。這個(gè)表空間將是在這個(gè)數(shù)據(jù)庫(kù)中創(chuàng)建的對(duì)象的表空間。詳見CREATE TABLESPACE。

allowconn

如果為假,則沒有人能連接到這個(gè)數(shù)據(jù)庫(kù)。默認(rèn)為真,表示允許連接(除了 被其他機(jī)制約束以外,例如GRANT/REVOKE CONNECT)。

connlimit

這個(gè)數(shù)據(jù)庫(kù)允許多少并發(fā)連接。-1 (默認(rèn)值)表示沒有限制。

istemplate

如果為真,則任何具有CREATEDB特權(quán)的用戶都可以從 這個(gè)數(shù)據(jù)庫(kù)克隆。如果為假(默認(rèn)),則只有超級(jí)用戶或者該數(shù)據(jù)庫(kù)的擁有者 可以克隆它。

可選的參數(shù)可以被寫成任何順序,不用按照上面說(shuō)明的順序。

注解

CREATE DATABASE不能在一個(gè)事務(wù)塊內(nèi)被執(zhí)行。

帶有一行不能初始化數(shù)據(jù)庫(kù)目錄的錯(cuò)誤大部分與在數(shù)據(jù)目錄上權(quán)限不足、磁盤滿或其他文件系統(tǒng)問(wèn)題有關(guān)。

使用DROP DATABASE移除一個(gè)數(shù)據(jù)庫(kù)。

程序createdb是這個(gè)命令的一個(gè)包裝器程序,為了使用方便而提供。

數(shù)據(jù)庫(kù)層面的配置參數(shù)(參見ALTER DATABASE)和 數(shù)據(jù)庫(kù)級(jí)權(quán)限(參見GRANT)不會(huì)從模板數(shù)據(jù)庫(kù)中復(fù)制。

盡管可以通過(guò)指定一個(gè)數(shù)據(jù)庫(kù)作為模板來(lái)從其中而不是template1復(fù)制,這(還)不是COPY DATABASE功能的一般目的。主要的限制是在模板數(shù)據(jù)庫(kù)被拷貝期間其他會(huì)話不能連接到它。如果CREATE DATABASE啟動(dòng)時(shí)還存在任何其他連接,它將失敗。否則,到模板數(shù)據(jù)庫(kù)的新連接將被擋在外面直到 CREATE DATABASE完成。詳見第 22.3 節(jié)。

為新數(shù)據(jù)庫(kù)指定的字符集編碼必須與選定的區(qū)域設(shè)置(LC_COLLATELC_CTYPE)相兼容。如果區(qū)域是C(或者等效的POSIX),那么所有編碼都被允許,但是對(duì)于其他區(qū)域設(shè)置只有一種編碼能正確工作(不過(guò),在 Windows 上 UTF-8 編碼能夠與任何區(qū)域一起使用)。 CREATE DATABASE將允許超級(jí)用戶指定SQL_ASCII編碼而不管區(qū)域設(shè)置,但是這種選擇已被廢棄并且可能在數(shù)據(jù)與數(shù)據(jù)庫(kù)中存儲(chǔ)的區(qū)域不是編碼兼容時(shí)讓字符串函數(shù)行為失當(dāng)。

編碼和區(qū)域設(shè)置必須匹配模板數(shù)據(jù)的編碼和區(qū)域,除非template0被用作模板。這是因?yàn)槠渌麛?shù)據(jù)庫(kù)可能包含不匹配指定編碼的數(shù)據(jù),或者可能包含排序順序受LC_COLLATELC_CTYPE影響的索引??截愡@種數(shù)據(jù)將導(dǎo)致一個(gè)由于該新設(shè)置損壞的數(shù)據(jù)庫(kù)。不過(guò),template0是不會(huì)含有任何可能被影響的數(shù)據(jù)或索引的。

CONNECTION LIMIT選項(xiàng)大概是唯一會(huì)被強(qiáng)制的,如果兩個(gè)新會(huì)話在大約同一時(shí)間開始并且那時(shí)該數(shù)據(jù)庫(kù)只剩有一個(gè)連接,可能兩者都會(huì)失敗。還有,該限制對(duì)超級(jí)用戶或后臺(tái)工作進(jìn)程無(wú)效。

例子

要?jiǎng)?chuàng)建一個(gè)新數(shù)據(jù)庫(kù):

CREATE DATABASE lusiadas;

要在一個(gè)默認(rèn)表空間salesspace中創(chuàng)建一個(gè)被用戶salesapp擁有的新數(shù)據(jù)庫(kù)sales

CREATE DATABASE sales OWNER salesapp TABLESPACE salesspace;

要用不同的語(yǔ)言環(huán)境創(chuàng)建數(shù)據(jù)庫(kù)music

CREATE DATABASE music
    LOCALE 'sv_SE.utf8'
    TEMPLATE template0;

在這個(gè)例子中,如果指定的語(yǔ)言環(huán)境與template1中的語(yǔ)言環(huán)境不同, 則需要TEMPLATE template0子句。(如果不是,則明確指定區(qū)域設(shè)置是多余的。)

要用不同的語(yǔ)言環(huán)境和不同的字符集編碼創(chuàng)建數(shù)據(jù)庫(kù)music2

CREATE DATABASE music2
    LOCALE 'sv_SE.iso885915'
    ENCODING LATIN9
    TEMPLATE template0;

指定的區(qū)域設(shè)置和編碼設(shè)置必須匹配,否則會(huì)報(bào)告錯(cuò)誤。

請(qǐng)注意,區(qū)域名稱是特定于操作系統(tǒng)的, 因此上述命令可能無(wú)法在任何地方以相同的方式工作。

兼容性

在 SQL 標(biāo)準(zhǔn)中沒有CREATE DATABASE語(yǔ)句。數(shù)據(jù)庫(kù)等效于目錄,而目錄的創(chuàng)建由實(shí)現(xiàn)定義。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)