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

PostgreSQL - is it possible to create a table with a specific sequence value?

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

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
);

我不是 Postgre 专家SQL 所以,现在,如果我想重新启动 id_alta 列表示的自动增量值,我打开一个 SQL 控制台并执行:

ALTER SEQUENCE ventajon.altas_sorteo_crucero_id_alta_seq RESTART WITH 1;

但是,我想知道是否可以为序列本身设置一个预定义值。如果我需要 id_alta 开始,比方说,50?或者...如果我想告诉这个 table 只要 id_alta 介于 50 和 250 之间就允许任何插入怎么办?

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

可能吗?

您无法影响使用 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));

如果您还想将序列与列相关联,以便在删除 table 时自动删除序列,您可以使用:

alter sequence altas_sorteo_crucero_id_alta_seq
   owned by altas_sorteo_crucero.id_alta;