↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 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
历史版本。 PostgreSQL 7.4 已结束支持。 请参阅 当前版本手册.

CREATE SCHEMA

CREATE SCHEMA — 定义一个新模式

大纲

CREATE SCHEMA schemaname [ AUTHORIZATION username ] [ schema_element [ ... ] ]
CREATE SCHEMA AUTHORIZATION username [ schema_element [ ... ] ]

描述

CREATE SCHEMA 将把一个新模式登记到当前数据库中。模式名必须与当前数据库中任何现有模式的名称不同。

模式本质上是一个名字空间:它包含一些有名对象(表、数据类型、函数和操作符),它们的名字可以与其他模式中现有对象的名字重复。访问有名对象既可以通过用模式名作前缀来“限定”其名字,也可以通过设置一个包含所需模式的搜索路径。非限定对象创建在当前模式中(即搜索路径最前端的那个模式,可以用函数 current_schema 确定)。

CREATE SCHEMA还可以选择包含子命令,以便在新模式中创建对象。这些子命令基本上会被当作在创建模式之后单独发出的命令来处理。不过,如果使用了AUTHORIZATION子句,则所有创建的对象都将归该用户所有。

参数

schemaname

要创建的模式的名称。如果省略,则用用户名作为模式名。

username

将拥有新模式的用户的角色名。如果省略,则默认为执行该命令的用户。只有超级用户才能创建由其他用户拥有的模式。

schema_element

一条定义要在模式内创建的对象的 SQL 语句。目前,只有 CREATE TABLE、CREATE VIEW 和 GRANT 被接受为 CREATE SCHEMA 中的子句。其他类型的对象可以在模式创建之后用单独的命令创建。

注解

要创建模式,调用用户必须拥有当前数据库上的 CREATE 权限。(当然,超级用户会绕过这个检查。)

示例

创建一个模式:

CREATE SCHEMA myschema;

为用户joe创建一个模式,该模式也将被命名为 joe:

CREATE SCHEMA 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权限授予其他人时才会发生。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.