PostgreSQL CREATE DATABASE

2021-09-09 10:17 更新

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

大綱

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)建一個新的PostgreSQL數(shù)據(jù)庫。

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

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

參數(shù)

name

要創(chuàng)建的數(shù)據(jù)庫名。

user_name

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

template

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

encoding

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

locale

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

提示

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

lc_collate

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

lc_ctype

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

tablespace_name

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

allowconn

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

connlimit

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

istemplate

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

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

注解

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

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

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

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

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

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

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

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

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

例子

要創(chuàng)建一個新數(shù)據(jù)庫:

CREATE DATABASE lusiadas;

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

CREATE DATABASE sales OWNER salesapp TABLESPACE salesspace;

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

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

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

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

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

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

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

兼容性

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


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號