PostgreSQL - 可以创建一个具有特定序列值的表吗?

时间:2015-09-29 13:53:07

标签: postgresql sequence create-table

我想在给定模式的PostgreSQL数据库中创建一个表。该表的定义如下:

CREATE TABLE ventajon.altas_sorteo_crucero (
    id_alta serial NOT NULL,
    fecha timestamp without time zone NOT NULL,
    nombre character varying(100) NOT NULL,
    apellidos character varying(100) NOT NULL,
    cifnif character varying(50) NOT NULL,
    email character varying(320) NOT NULL,
    telefono character varying(50) NOT NULL
) WITH (
    OIDS=FALSE
);

我不是PostgreSQL的大师所以,现在,如果我想重新启动id_alta列所代表的自动增量值,我打开一个SQL控制台并执行它:

ALTER SEQUENCE ventajon.altas_sorteo_crucero_id_alta_seq RESTART WITH 1;

但是,我想知道是否可以为序列本身设置预定义值。如果我需要id_alta开始,让我们说50,怎么办?或者......如果我想在id_alta落在50到250之间时告诉此表允许任何插入,该怎么办?

如果我需要像现在这样做,在两个查询中完成此操作,这是完全可以的。只是......我想知道这是否可以一步完成。

有可能吗?

1 个答案:

答案 0 :(得分:2)

使用serial类型时,您无法影响自动创建的序列。但是您可以通过手动创建序列来实现您想要的目标:

create sequence altas_sorteo_crucero_id_alta_seq
   start with 50
   minvalue 50
   maxvalue 250;

CREATE TABLE ventajon.altas_sorteo_crucero (
    id_alta integer NOT NULL default nextval('altas_sorteo_crucero_id_alta_seq'),
    fecha timestamp without time zone NOT NULL,
    nombre character varying(100) NOT NULL,
    apellidos character varying(100) NOT NULL,
    cifnif character varying(50) NOT NULL,
    email character varying(320) NOT NULL,
    telefono character varying(50) NOT NULL
) ;

但是,这不会阻止某人手动id_alta提供超出50-250范围的值。如果你想限制它,你需要一个检查约束:

alter table ventajon.altas_sorteo_crucero
  add constraint checK_id_alta check (id_alta between 50 and 205));

如果您还想将序列与列关联,以便在删除表时自动删除序列,则可以使用以下命令执行此操作:

alter sequence altas_sorteo_crucero_id_alta_seq
   owned by altas_sorteo_crucero.id_alta;