暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GBase8s数据库对序列和简单大对象数据类型的限制

张维群 2021-11-26
831

序列和简单大对象数据类型不能嵌套在表中。因此,如果 ROW 类型包含 BYTE 、TEXT 、

SERIAL 、BIGSERIAL 或 SERIAL8 字段,则不能使用 ROW 类型在并非基于 ROW 类型的表

中定义列。例如,以下代码示例产生一个错误:

CREATE ROW TYPE serialtype (s serial, s8 serial8);

CREATE TABLE tab1 (col1 serialtype); --INVALID CODE

不能创建有存储在单独存储空间中的 BYTE 或 TEXT 值的 ROW 类型。即,不能使用 IN 子句指定

存储位置。例如,以下示例产生一个错误:

CREATE ROW TYPE row1 (field1 byte IN blobspace1); --INVALID CODE

表层次结构只能包含一个 SERIAL 、BIGSERIAL 或 SERIAL8 列。如果超级表包含 SERIAL

列,则没有子表能够包含 SERIAL 列。(但是如果没有其它子表包含 BIGSERIAL 或 SERIAL8

列,则子表可以拥有 BIGSERIAL 或 SERIAL8 列。)从而,当创建表层次结构所依据的已命名的

ROW 类型时,它们最多可以包含这些类型中的一个 SERIAL 和一个 BIGSERIAL 或 SERIAL8

字段。

不能用 CREATE ROW TYPE 语句设置起始 SERIAL 、BIGSERIAL 或 SERIAL8 值。要修改序

列字段的值,必须使用 ALTER TABLE 语句的 MODIFY 子句或使用 INSERT 语句插入大于当前

最大(或缺省)序列值的一个值。 ROW 类型中的序列字段在表层次结构上具有性能影响。要将数

据插入超级表(或其超级表)包含序列计数器的子表中,数据库服务器还必须打开超级表,更新序

列值并关闭该超级表,从而添加额外开销。

在对 SERIAL 、BIGSERIAL 或 SERIAL8 数据类型发出的限制或性能与您的设计目标冲突的上下

文中,可能要考虑使用序列对象来模拟序列字段或序列列的功能。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论