创建:
方法1:直接在表中指定字段类型为serial 类型
create table tbl_xulie (id serial, name text);
方法2:先创建序列名称,然后在新建的表中列属性指定序列就可以了,该列需int 类型
CREATE [ TEMPORARY | TEMP ] SEQUENCE name [ INCREMENT [ BY ] increment ]
[ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ]
[ START [ WITH ] start ] [ CACHE cache ] [ [ NO ] CYCLE ]
[ OWNED BY { table.column | NONE } ]
实例:
CREATE sequence tbl_xulie2_id_seq increment BY 1 minvalue 1 NO MAXVALUE START WITH 1;
CREATE TABLE tbl_xulie2 ( id INT4 NOT NULL DEFAULT nextval ( 'tbl_xulie2_id_seq' ), NAME text );
使用方法2可以自己指定序列名称。
如果使用方法1,系统会自动生成一个序列名称,命名规则是表名_字段名_seq。
查看序列属性:
序列信息都存储在pg_class中,pg_class里面各个字段的含义,可以在官网查看。因此可以在pg_class里面查询自己创建的序列的各个属性:
SELECT * FROM "pg_class" "c" WHERE "c"."relkind" = 'S';
修改序列:
ALTER SEQUENCE name [ INCREMENT [ BY ] increment ]
[ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ]
[ START [ WITH ] start ]
[ RESTART [ [ WITH ] restart ] ]
[ CACHE cache ] [ [ NO ] CYCLE ]
[ OWNED BY { table.column | NONE } ]
ALTER SEQUENCE name OWNER TO new_owner
ALTER SEQUENCE name RENAME TO new_name
ALTER SEQUENCE name SET SCHEMA new_schema
删除序列:
DROP SEQUENCE [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]
当有表字段使用到PG序列时,不能直接删除。
注意:
当使用方法1创建序列时,序列名是系统自动生成的,在使用中,上层代码可能会分析命名规则,自己把序列名称拼出来,在一般情况下是没问题的,但是一旦表名被修改,则上层无法生成正确的名称。因此,当修改表名后,需要同步修改序列名,保证序列命名规则与系统默认的一致。