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

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

上一章 首页 下一章