CREATE SCHEMA

CREATE SCHEMA —定义一个新的模式

Synopsis

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_USER
  | SESSION_USER

Description

CREATE SCHEMA将新架构 Importing 当前数据库。模式名称必须不同于当前数据库中任何现有模式的名称。

模式本质上是一个命名空间:它包含命名对象(表,数据类型,函数和运算符),其名称可以与其他模式中存在的其他对象的名称重复。通过使用模式名称作为前缀“限定”其名称,或通过设置包含所需模式的搜索路径,可以访问已命名的对象。一条指定了不合格对象名称的CREATE命令将在当前模式(位于搜索路径前面的对象,可以通过函数current_schema确定)中创建该对象。

可选的CREATE SCHEMA可以包含子命令以在新架构中创建对象。子命令与创建模式后发出的单独命令基本相同,不同之处在于,如果使用AUTHORIZATION子句,则所有创建的对象将归该用户所有。

Parameters

  • schema_name

    • 要创建的模式的名称。如果省略,则使用* user_name *作为模式名称。该名称不能以pg_开头,因为此类名称是为系统架构保留的。
  • user_name

    • 拥有新架构的用户的角色名称。如果省略,则默认为执行命令的用户。要创建另一个角色拥有的架构,您必须是该角色的直接或间接成员,或者是超级用户。
  • schema_element

    • 定义要在架构内创建的对象的 SQL 语句。当前,仅CREATE TABLECREATE VIEWCREATE INDEXCREATE SEQUENCECREATE TRIGGERGRANT被接受为CREATE SCHEMA中的子句。创建架构后,可以在单独的命令中创建其他类型的对象。
  • IF NOT EXISTS

    • 如果已经存在相同名称的模式,则不执行任何操作(发出通知除外)。 * schema_element *使用此选项时,不能包含子命令。

Notes

要创建模式,调用用户必须对当前数据库具有CREATE特权。 (当然,超级用户会绕过此检查.)

Examples

创建一个架构:

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;

Compatibility

SQL 标准允许CREATE SCHEMA中的DEFAULT CHARACTER SET子句,以及比 PostgreSQL 目前接受的子命令类型更多的子命令类型。

SQL 标准指定CREATE SCHEMA中的子命令可以按任何 Sequences 出现。当前的 PostgreSQL 实现不能在子命令中处理所有前向引用的情况。有时可能需要对子命令重新排序,以避免前向引用。

根据 SQL 标准,模式的所有者始终拥有其中的所有对象。 PostgreSQL 允许模式包含模式所有者以外的用户拥有的对象。仅当模式所有者将其模式的CREATE特权授予他人或超级用户选择在其中创建对象时,才会发生这种情况。

IF NOT EXISTS选项是 PostgreSQL 扩展。

See Also

ALTER SCHEMA, DROP SCHEMA