CREATE ROW TYPE serialtype (s serial, s8 serial8); CREATE TABLE tab1 (col1 serialtype); --INVALID CODE
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 数据类型发出的限制或性能与您的设计目标冲突的上下文中,可能要考虑使用序列对象来模拟序列字段或序列列的功能。