支援的版本:目前 (17) / 16 / 15 / 14 / 13
開發版本:devel
不支援的版本:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3

CREATE SCHEMA

CREATE SCHEMA — 定義一個新的綱要

概要

CREATE SCHEMA schema_name [ AUTHORIZATION role_specification ] [ schema_element [ ... ] ]
CREATE SCHEMA AUTHORIZATION role_specification [ schema_element [ ... ] ]
CREATE SCHEMA IF NOT EXISTS schema_name [ AUTHORIZATION role_specification ]
CREATE SCHEMA IF NOT EXISTS AUTHORIZATION role_specification

where role_specification can be:

    user_name
  | CURRENT_ROLE
  | CURRENT_USER
  | SESSION_USER

描述

CREATE SCHEMA 在目前的資料庫中輸入一個新的綱要。綱要名稱必須與目前資料庫中任何現有綱要的名稱不同。

綱要本質上是一個命名空間:它包含已命名的物件(資料表、資料類型、函數和運算子),這些物件的名稱可以與其他綱要中存在的其他物件重複。已命名的物件可以透過以下方式存取:使用綱要名稱作為字首為它們的名稱進行限定,或設定包含所需綱要的搜尋路徑。指定不合格物件名稱的 CREATE 指令會在目前的綱要中建立物件(位於搜尋路徑最前面的綱要,可以使用函數 current_schema 確定)。

選擇性地,CREATE SCHEMA 可以包含子指令以在新的綱要中建立物件。子指令的處理方式與建立綱要後發出的個別指令基本相同,但如果使用 AUTHORIZATION 子句,則所有建立的物件都將由該使用者擁有。

參數

schema_name

要建立的綱要的名稱。 如果省略此選項,則 user_name 將用作綱要名稱。 該名稱不能以 pg_ 開頭,因為此類名稱保留給系統綱要。

user_name

將擁有新綱要的使用者的角色名稱。 如果省略,則預設為執行指令的使用者。 若要建立由另一個角色擁有的綱要,您必須能夠 SET ROLE 到該角色。

schema_element

一個 SQL 陳述式,定義要在綱要中建立的物件。 目前,只有 CREATE TABLECREATE VIEWCREATE INDEXCREATE SEQUENCECREATE TRIGGERGRANT 可接受作為 CREATE SCHEMA 中的子句。 可以在建立綱要後,使用單獨的指令來建立其他種類的物件。

IF NOT EXISTS

如果已存在具有相同名稱的綱要,則不執行任何操作(除非發出通知)。 使用此選項時,無法包含 schema_element 子指令。

備註

要建立綱要,呼叫使用者必須擁有目前資料庫的 CREATE 權限。 (當然,超級使用者會繞過此檢查。)

範例

建立綱要

CREATE SCHEMA myschema;

為使用者 joe 建立綱要;綱要也將被命名為 joe

CREATE SCHEMA AUTHORIZATION joe;

建立一個名為 test 的綱要,該綱要將由使用者 joe 擁有,除非已經有一個名為 test 的綱要。(joe 是否擁有預先存在的綱要並不重要。)

CREATE SCHEMA IF NOT EXISTS test AUTHORIZATION joe;

建立一個綱要,並在其中建立一個資料表和檢視

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 標準,綱要的擁有者始終擁有其中的所有物件。PostgreSQL 允許綱要包含由綱要擁有者以外的使用者擁有的物件。 只有在綱要擁有者將其綱要的 CREATE 權限授予其他人,或者超級使用者選擇在其中建立物件時,才會發生這種情況。

IF NOT EXISTS 選項是 PostgreSQL 擴充。

提交更正

如果您在文件中發現任何不正確、與您使用特定功能的體驗不符或需要進一步說明的內容,請使用此表格來報告文件問題。