CREATE SCHEMA

创建方案

定义一个新的方案

概要

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

CREATE SCHEMA AUTHORIZATION rolename [schema_element [ ... ]]

描述

CREATE SCHEMA 将新的方案输入到当前的数据库中。方案名称必须与当前数据库中现有的名称不同。

方案本质上就是一个命名空间:它包含命名对象(表, 数据类型,函数,和操作符)这些名字可能会与该方案中其他对象的名字重叠。命名对象通过将其名称以方案名称作为其前缀进行限定,或者通过设置包含所需方案的搜索路径进行访问。指定非限定对象名称的CREATE命令在当前方案中创建对象(搜索路径前面的对象,可以使用函数 current_schema确定)。

可选择地是, CREATE SCHEMA 可以包含子命令来在新方案中创建对象。这些子命令本质上和创建方案之后发出的单独命令相同, 除了如果使用 AUTHORIZATION 子句,所有创建的对象由该角色有用。

参数

schema_name
创建方案的名称,如果省略,则用户名被用作方案名。该名字不能以 pg_开头,因为这些名字是为系统目录方案保存的。
rolename
拥有该方案的角色的名称。如果省略,默认为执行该命令的角色。只有超级用户可以创建属于其他角色的方案,除了他们自己。
schema_element
定义在方案中创建对象的SQL语句。目前,只有 CREATE TABLECREATE VIEWCREATE INDEXCREATE SEQUENCECREATE TRIGGERGRANT 被认作为 CREATE SCHEMA中的子句。其他对象可能在方案创建之后以单独的命令来创建。
注意:Greenplum数据库不支持触发器

注意

要创建方案,该调用用户必须要有当前数据库的 CREATE权限或者是超级用户。

示例

创建一个方案:

CREATE SCHEMA myschema;

为角色 joe 创建一个方案(该方案也叫 joe):

CREATE SCHEMA AUTHORIZATION joe;

兼容性

SQL标准允许 DEFAULT CHARACTER SET 子句在 CREATE SCHEMA中,还有比现在Greenplum支持的更多的子命令类型。

SQL标准指定了在 CREATE SCHEMA 中的子命令可以出现在任何顺序。目前Greenplum数据库实现不能处理子命令中所有转发引用的问题。有时,有必要重新排序子命令,以避免转发引用。

根据SQL标准,方案的拥有者通常拥有里面的所有对象。Greenplum数据库允许对象包含不是方案对象本身拥有的对象。这当且仅当方案拥有者给其他人授权了 CREATE 权限。