CREATE SCHEMA — 定義一個新的 schema
CREATE SCHEMAschema_name
[ AUTHORIZATIONrole_specification
] [schema_element
[ ... ] ] CREATE SCHEMA AUTHORIZATIONrole_specification
[schema_element
[ ... ] ] CREATE SCHEMA IF NOT EXISTSschema_name
[ AUTHORIZATIONrole_specification
] CREATE SCHEMA IF NOT EXISTS AUTHORIZATIONrole_specification
whererole_specification
can be:user_name
| CURRENT_ROLE | CURRENT_USER | SESSION_USER
CREATE SCHEMA
在目前的資料庫中輸入一個新的 schema。 schema 名稱必須與目前資料庫中任何現有 schema 的名稱不同。
Schema 本質上是一個命名空間:它包含具名的物件(資料表、資料類型、函式和運算子),其名稱可以與其他 schema 中存在的其他物件重複。具名的物件可以透過以 schema 名稱作為前綴來 「限定」 其名稱,或透過設定包含所需 schema 的搜尋路徑來存取。指定不合格物件名稱的 CREATE
命令會在目前的 schema 中建立物件(搜尋路徑最前面的那個,可以使用 current_schema
函式來判斷)。
或者,CREATE SCHEMA
可以包含子命令以在新 schema 中建立物件。子命令的處理方式與在建立 schema 後發出的單獨命令基本相同,除非使用了 AUTHORIZATION
子句,否則所有建立的物件都將由該使用者擁有。
schema_name
要建立的 schema 的名稱。 如果省略,則 user_name
會被用作 schema 名稱。該名稱不能以 pg_
開頭,因為這些名稱保留給系統 schema 使用。
user_name
將擁有新 schema 的使用者的角色名稱。 如果省略,則預設為執行命令的使用者。 若要建立由另一個角色擁有的 schema,您必須能夠 SET ROLE
到該角色。
schema_element
定義要在 schema 中建立的物件的 SQL 語句。 目前,只有 CREATE TABLE
、CREATE VIEW
、CREATE INDEX
、CREATE SEQUENCE
、CREATE TRIGGER
和 GRANT
被接受作為 CREATE SCHEMA
中的子句。 其他類型的物件可以在建立 schema 後使用單獨的命令建立。
IF NOT EXISTS
如果已存在具有相同名稱的 schema,則不執行任何操作(除了發出通知)。 使用此選項時,不能包含 schema_element
子命令。
要建立 schema,調用使用者必須具有目前資料庫的 CREATE
權限。 (當然,超級使用者會繞過此檢查。)
建立一個 schema
CREATE SCHEMA myschema;
為使用者 joe
建立一個 schema;該 schema 也將被命名為 joe
CREATE SCHEMA AUTHORIZATION joe;
建立一個名為 test
的 schema,該 schema 將由使用者 joe
擁有,除非已經有一個名為 test
的 schema。 (joe
是否擁有已存在的 schema 並不重要。)
CREATE SCHEMA IF NOT EXISTS test AUTHORIZATION joe;
建立一個 schema,並在其中建立一個資料表和檢視
CREATE SCHEMA hollywood CREATE TABLE films (title text, release date, awards text[]) CREATE VIEW winners AS SELECT title, release FROM films WHERE awards IS NOT NULL;
請注意,個別的子命令不以分號結尾。
以下是完成相同結果的等效方法
CREATE SCHEMA hollywood; CREATE TABLE hollywood.films (title text, release date, awards text[]); CREATE VIEW hollywood.winners AS SELECT title, release FROM hollywood.films WHERE awards IS NOT NULL;
SQL 標準允許在 CREATE SCHEMA
中使用 DEFAULT CHARACTER SET
子句,以及比目前 PostgreSQL 接受的更多子命令類型。
SQL 標準指定 CREATE SCHEMA
中的子命令可以以任何順序出現。目前的 PostgreSQL 實作並未處理子命令中所有前向參照的情況;有時可能需要重新排序子命令以避免前向參照。
根據 SQL 標準,schema 的擁有者始終擁有其中的所有物件。 PostgreSQL 允許 schema 包含由 schema 擁有者以外的使用者擁有的物件。 只有在 schema 擁有者將其 schema 的 CREATE
權限授予其他人,或超級使用者選擇在其中建立物件時,才會發生這種情況。
IF NOT EXISTS
選項是一個 PostgreSQL 擴充功能。
如果您在文件中發現任何不正確、與您使用特定功能的經驗不符,或需要進一步澄清之處,請使用此表格回報文件問題。