On this page
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 TABLE
,CREATE VIEW
,CREATE INDEX
,CREATE SEQUENCE
,CREATE TRIGGER
和GRANT
被接受为CREATE SCHEMA
中的子句。创建架构后,可以在单独的命令中创建其他类型的对象。
- 定义要在架构内创建的对象的 SQL 语句。当前,仅
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 扩展。