CREATE DATABASE

Name

CREATE DATABASE -- 建立新資料庫

Synopsis

CREATE DATABASE name
    [ [ WITH ] [ OWNER [=] dbowner ]
	   [ TEMPLATE [=] template ]
           [ ENCODING [=] encoding ]
           [ TABLESPACE [=] tablespace ] ]

描述

CREATE DATABASE 建立一個新的 PostgreSQL 資料庫。

要建立一個資料庫,您必須是一個超級用戶或者有特殊的 CREATEDB 權限。 參閱 CREATE USER

通常,建立者成為新資料庫的管理員。 超級用戶可以用 OWNER 子句建立其它用戶所有的資料庫。 他們甚至可以建立沒有特殊權限的用戶所有的資料庫。 有CREATEDB權限的非超級用戶使用只能建立自己使用的資料庫。

預設時,新資料庫將透過克隆標準系統資料庫 template1 來建立。不同的模板可以用 TEMPLATE = name 來寫。尤其是,如果您用 TEMPLATE = template0, 您可以建立一個很純淨的資料庫,只包括您的版本的 PostgreSQL 預定義的 標準對象。這個方法可以避免把任何已經加入到template1 裡的本地安裝對像拷貝到新資料庫。

參數

name

要建立的資料庫名。

dbowner

資料庫用戶的名字,他將擁有新資料庫,或者是寫 DEFAULT 使用預設的(也就是執行命令的用戶)。

template

從哪個模板建立新資料庫,這是模板名。或者用 DEFAULT 使用預設模板(template1)。

encoding

建立新資料庫用的多字元編碼方法。聲明一個字串文本名字 (比如,'SQL_ASCII'),或者一個整數編號,或者是 DEFAULT 資料表示使用預設編碼。 PostgreSQL 伺服器支援的字元集在 Section 20.2.1 裡描述。

tablespace

和新資料庫關聯的的資料表空間名字,或者用 DEFAULT 使用模版資料庫使用的預設資料表空間。 這個資料表空間將成為在這個資料庫裡建立的對象的預設資料表空間。 參閱 CREATE TABLESPACE 獲取更多訊息。

可選參數可以以任意順序寫,而不僅是上面顯示的順序。

注意

CREATE DATABASE 不能在一個交易裡面執行。

類似 "could not initialize database directory" 這樣的錯誤最有可能是因為資料目錄的權限不夠, 或者磁盤滿,或者其它文件系統的問題。

使用 DROP DATABASE 刪除一個資料庫。

程序 createdb 是是這個命令的封裝,提供來方便使用。

儘管我們可以透過把某資料庫名聲明為模板(而非 template1)從非template1資料庫拷貝資料庫, 但是這(還)不是一個通用的 "COPY DATABASE" 功能。 因此,我們建議當做模板使用的資料庫都應該是以只讀方式對待的。 參閱 Section 18.3 獲取更多訊息。

例子

建立一個新的資料庫:

CREATE DATABASE lusiadas;

建立一個由用戶 salesapp 所有的資料庫 sales,預設資料表空間是 salesspace

CREATE DATABASE sales OWNER salesapp TABLESPACE salesspace;

建立一個資料庫 music,支援 ISO-8859-1 字元集:

CREATE DATABASE music ENCODING 'LATIN1';

相容性

在 SQL 標準裡沒有 CREATE DATABASE 語句。 資料庫等同於目錄,其建立是由實現決定的。