2025年9月25日: PostgreSQL 18 釋出!
支援版本:當前18)/ 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 SCHEMA 中只接受 CREATE TABLECREATE VIEWCREATE INDEXCREATE SEQUENCECREATE TRIGGERGRANT 作為子句。其他型別的物件可以在模式建立後透過單獨的命令建立。

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 的擴充套件。

另請參閱

ALTER SCHEMA, DROP SCHEMA

提交更正

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