CREATE SCHEMA
更新时间:2026-06-24
定义一个新的模式。
语法
SQL
1 CREATE SCHEMA schema_name [AUTHORIZATION username]
2 [schema_element [ ... ]]
3
4 CREATE SCHEMA AUTHORIZATION rolename [schema_element [ ... ]]
5
6 CREATE SCHEMA IF NOT EXISTS schema_name [ AUTHORIZATION user_name ]
7
8 CREATE SCHEMA IF NOT EXISTS AUTHORIZATION user_name
9 ```
10
11
12
13## 描述
14
15`CREATE SCHEMA`将新模式加入当前数据库。 模式名称必须不同于当前数据库中任何现有模式的名称。
16
17 模式本质上是一个名称空间:它包含命名对象(表,数据类型,函数和运算符),其名称可能与其他模式中存在的其他对象的名称重复。通过使用模式名称作为前缀来限定其名称,或设置包含所需模式的搜索路径,可以访问命名对象。
18
19 使用`CREATE`命令指定了不合格的对象名称,将在当前模式(搜索路径前面的对象,可以使用`current_schema`函数确定)中创建该对象。
20
21 (可选)`CREATE SCHEMA`可以包含子命令以在新模式中创建对象。 子命令与创建模式后发出的单独命令基本相同,不同之处在于,如果使用`AUTHORIZATION`子句,则所有创建的对象将归该角色所有。
22
23
24
25## 参数
26
27该SQL命令参数说明见下
28
29 `schema_name`
30 : 要创建的模式的名称。如果省略,则将用户名用作模式名称。 该名称不能以`pg_`开头,因为此类名称是为系统catalog模式保留的。
31
32 `user_name`
33 : 拥有模式的角色的名称。如果省略,则默认为执行命令的角色。只有数据库管理员可以创建除自己以外的角色所有的模式。
34
35 `schema_element`
36 : 定义要在模式内创建的对象的SQL语句。 当前,在`CREATE SCHEMA`中,只有`CREATE TABLE`,`CREATE VIEW`, `CREATE INDEX`,`CREATE SEQUENCE`,`CREATE TRIGGER`和`GRANT`被接受为子句。 创建模式后,可以在单独的命令中创建其他类型的对象。
37
38 `IF NOT EXISTS`
39 : 如果已经存在相同名称的模式,则不执行任何操作(发出通知除外)。 使用此选项时,不能包含`schema_element`子命令。
40
41
42
43注解
44: 要创建模式,调用用户必须对当前数据库具有`CREATE`权限,或者必须是数据库管理员。
45
46
47
48## 示例
49
50创建一个模式:
51
52 ``` sql
53 CREATE SCHEMA myschema;
54 ```
55
56 为角色`joe`创建一个模式(该模式也将命名为`joe`):
57
58 ``` sql
59 CREATE SCHEMA AUTHORIZATION joe;
60 ```
61
62
63 创建一个名为`test`的模式,该模式将由用户`joe`拥有,除非已经有一个名为`test`的模式。
64 (`joe`是否拥有预先存在的模式是没有影响的。)
65
66 ``` sql
67 CREATE SCHEMA IF NOT EXISTS test AUTHORIZATION joe;
68 ```
69
70
71
72
73兼容性说明
74: SQL标准允许在`CREATE SCHEMA`中使用`DEFAULT CHARACTER SET`子句,以及比PalopgMPP数据库目前接受的子命令类型更多的子命令类型。
75
76 SQL标准指定`CREATE SCHEMA`中的子命令可以按任何顺序出现。当前的PalopgMPP数据库实现并未处理子命令中所有前向引用的情况;有时可能需要对子命令重新排序,以避免前向引用。
77
78 根据SQL标准,模式的所有者始终拥有其中的所有对象。 PalopgMPP数据库允许模式包含模式所有者以外的用户拥有的对象。仅当模式所有者将模式的`CREATE`权限授予其他人,或者数据库管理员选择在其中创建对象时,才会发生这种情况。
79
80 `IF NOT EXISTS`选项是PalopgMPP数据库扩展。
81
82
83
84相关SQL命令
85: ` ALTER SCHEMA ` , ` DROP SCHEMA `
评价此篇文章
