pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
CREATE SCHEMA — 定义一个新模式
CREATE SCHEMAschemaname[ AUTHORIZATIONusername] [schema_element[ ... ] ] CREATE SCHEMA AUTHORIZATIONusername[schema_element[ ... ] ]
schemaname要创建的模式的名称。如果省略, 则用用户名作为模式名。
username将拥有新模式的用户的角色名。如果省略,则默认为执行该命令的用户。只有超级用户才能创建由其他用户拥有的模式。
schema_element一条定义要在模式内创建的对象的 SQL 语句。 目前,只有 CREATE TABLE、CREATE VIEW 和 GRANT 被接受为 CREATE SCHEMA 中的子句。其他类型的对象 可以在模式创建之后用单独的命令创建。
CREATE SCHEMA命令成功时返回的消息。
ERROR: namespace "schemaname" already exists指定的模式已经存在。
CREATE SCHEMA 将把一个新模式 登记到当前数据库中。 模式名必须与当前数据库中任何现有模式的名称 不同。
模式本质上是一个名字空间: 它包含一些有名对象(表、数据类型、函数和操作符), 它们的名字可以与其他模式中现有对象的名字 重复。访问有名对象既可以通过用模式名作前缀来“限定” 其名字,也可以通过设置一个包含所需模式的搜索 路径。非限定对象创建在当前模式中(即搜索路径最前端 的那个模式;见 CURRENT_SCHEMA())。
CREATE SCHEMA还可以选择包含子命令,以便在新模式中创建 对象。这些子命令基本上会被当作在创建模式之后单独发出的命令来处理。不过,如果 使用了AUTHORIZATION子句,则所有创建的对象都将归该用户所有。
要创建模式,调用用户必须拥有当前数据库上的 CREATE 权限。(当然,超级用户 会绕过这个检查。)
使用 DROP SCHEMA 删除一个模式。
创建一个模式:
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;
SQL92 允许在 CREATE SCHEMA 中使用 DEFAULT CHARACTER SET 子句, 也允许比 PostgreSQL 目前所接受的 更多的子命令类型。
SQL92 规定 CREATE SCHEMA 中的子命令 可以以任意顺序出现。目前的 PostgreSQL 实现并不处理 子命令中前向引用的所有情形;有时 可能需要重新排列子命令的顺序以避免前向引用。
在 SQL92 中,模式的拥有者总是拥有其中的所有对象。 PostgreSQL 允许模式包含 由模式拥有者之外的用户拥有的对象。这只有当 模式拥有者把其模式上的 CREATE 权限授予他人时 才可能发生。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。