返回首页

gbase数据、南大通用产品文档:GBase8cCREATE SCHEMA

更新日期:2024年09月11日

功能描述
创建模式。
访问命名对象时可以使用模式名作为前缀进行访问,
如果无模式名前缀,
则访问当前模
式下的命名对象。创建命名对象时也可用模式名作为前缀修饰。
另外,CREATE SCHEMA 可以包括在新模式中创建对象的子命令,这些子命令和那些
在创建完模式后发出的命令没有任何区别。如果使用了AUTHORIZATION 子句,则所有创
建的对象都将被该用户所拥有。
注意事项
只要用户对当前数据库有CREATE 权限,就可以创建模式。

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
942
系统管理员在普通用户同名schema 下创建的对象,
所有者为schema 的同名用户
(非系
统管理员)

语法格式
根据指定的名称创建模式。
CREATE SCHEMA [IF NOT EXISTS] schema_name
[ AUTHORIZATION user_name ] [WITH BLOCKCHAIN] [ schema_element [ ... ] ];
参数说明

IF NOT EXISTS
若指定该参数,则当一个同名的模式已经存在时,仅发出提示。

schema_name
模式名称。
取值范围:字符串,要符合标识符的命名规范。

模式名不能和当前数据库里其他的模式重名。

模式的名称不可以“pg_”开头。

AUTHORIZATION user_name
指定模式的所有者。
当不指定schema_name 时,
则默认创建一个与user_name 同名的模
式,此时user_name 只能是角色名。
取值范围:已存在的用户名/角色名。

WITH BLOCKCHAIN
指定模式的防篡改属性,防篡改模式下的行存普通用户表将自动扩展为防篡改用户表。

schema_element
在模式里创建对象的SQL 语句。
目前仅支持CREATE TABLE、
CREATE VIEW、
CREATE
INDEX、CREATE PARTITION、CREATE SEQUENCE、CREATE TRIGGER、GRANT 子句。

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
943
子命令所创建的对象都被AUTHORIZATION 子句指定的用户所拥有。

如果当前搜索路径上的模式中存在同名对象时,需要明确指定引用对象所在的模
式。可以通过命令SHOW SEARCH_PATH 来查看当前搜索路径上的模式。
示例
--创建一个角色role1。
gbase=# CREATE ROLE role1 IDENTIFIED BY 'Role,123';
--为用户role1 创建一个同名schema,子命令创建的表films 和winners 的拥有者为
role1。
gbase=# CREATE SCHEMA AUTHORIZATION role1
gbase-# CREATE TABLE films (title text, release date, awards text[])
gbase-# CREATE VIEW winners AS
gbase-# SELECT title, release FROM films WHERE awards IS NOT NULL;
--删除schema。
gbase=# DROP SCHEMA role1 CASCADE;
--删除用户。
gbase=# DROP USER role1 CASCADE;
相关命令
ALTER SCHEMA,DROP SCHEMA

创建和管理序列
背景信息
序列Sequence 是用来产生唯一整数的数据库对象。序列的值是按照一定规则自增的整
数。因为自增所以不重复,因此说Sequence 具有唯一标识性。这也是Sequence 常被用作主
键的原因。
通过序列使某字段成为唯一标识符的方法有两种:

一种是声明字段的类型为序列整型,由数据库在后台自动创建一个对应的Sequence。

另一种是使用CREATE SEQUENCE 自定义一个新的Sequence ,然后将
nextval('sequence_name')函数读取的序列值,指定为某一字段的默认值,这样该字段就
可以作为唯一标识符。
操作步骤
方法一:声明字段类型为序列整型来定义标识符字段。例如:
postgres=# CREATE TABLE T1 (id serial, name text);
当结果显示为如下信息,则表示创建成功。
CREATE TABLE
方法二:创建序列,并通过nextval('sequence_name')函数指定为某一字段的默认值。
1.
创建序列
postgres=# CREATE SEQUENCE seq1 cache 100;
当结果显示为如下信息,则表示创建成功。

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
45
CREATE SEQUENCE
2.
指定为某一字段的默认值,使该字段具有唯一标识属性。
postgres=# CREATE TABLE T2 (id int not null default nextval('seq1'), name text);
当结果显示为如下信息,则表示默认值指定成功。
CREATE TABLE
3.
指定序列与列的归属关系。
将序列和一个表的指定字段进行关联。
这样,
在删除那个字段或其所在表的时候会自动
删除已关联的序列。
postgres=# ALTER SEQUENCE seq1 OWNED BY T2.id;
当结果显示为如下信息,则表示指定成功。
ALTER SEQUENCE
除了为序列指定了cache,
方法二所实现的功能基本与方法一类似。
但是一旦定义cache,
序列将会产生空洞(序列值为不连贯的数值,如:1.4.5),并且不能保序。另外为某序列
指定从属列后,该列删除,对应的sequence 也会被删除。虽然数据库并不限制序列只
能为一列产生默认值,但最好不要多列共用同一个序列。
当前版本只支持在定义表的时候指定自增列,或者指定某列的默认值为
nextval('seqname'),不支持在已有表中增加自增列或者增加默认值为nextval('seqname')
的列。
4
开发设计建议

配置参数(SQL 管理 API)
随同 admin() 或 task() 函数,使用 set onconfig permanent 参数来动态地更新 onconfig 文
件中的配置参数值。
语法

元素
描述
关键考虑
configuration_parameter_name
配置参数的名称。 该配置参数必须是您可动态地更新
的。
您可动态地更新的配置参数列表与
onmode -wf 命令的相同。
new_value
配置参数的一个
或多个新的值。
这个或这些新的配置参数值必须是
有效的。
新值的格式必须严格地遵循那个配
置参数的语法。

用法
使用这个函数来永久地更新配置参数的值。新的值立即生效并在服务器重启之后保存在
onconfig 文件中。
这个函数等同于 onmode -wf 命令。
示例
下列示例在 onconfig 文件中设置 DYNAMIC_LOGS 配置参数的值为 2:
EXECUTE FUNCTION task("set onconfig permanent","DYNAMIC_LOGS","2");

GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 792 -