PostgreSQL-是否可以创建具有特定序列值的表?

PostgreSQL-是否可以创建具有特定序列值的表?,postgresql,sequence,create-table,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,

我想在给定模式的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\u alta
列表示的自动增量值,我会打开一个SQL控制台并执行以下操作:

ALTER SEQUENCE ventajon.altas_sorteo_crucero_id_alta_seq RESTART WITH 1;
但是,我想知道是否可以为序列本身设置预定义的值。如果我需要
id_alta
从50开始怎么办?或如果我想告诉此表允许任何插入,只要
id_alta
介于50和250之间,该怎么办

如果我需要像现在这样在两个查询中完成这项工作,那就完全可以了。只是我想知道这是否可以一步到位


有可能吗?

您不能影响使用
串行类型时自动创建的序列。但您可以通过手动创建序列来实现您想要的:

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
) ;
但是,这不会阻止有人手动为超出50-250范围的
id_alta
提供值。如果还要限制该限制,则需要一个检查约束:

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;

在最后一种情况下使用触发器?不,不一定。我对第二种情况的解释是,只要ID在给定范围内,就允许出现新行。一旦退出,就不会插入任何行。然而,这对我来说是理论。我还得测试一下。