我想在给定模式的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之间时告诉此表允许任何插入,该怎么办?
如果我需要像现在这样做,在两个查询中完成此操作,这是完全可以的。只是......我想知道这是否可以一步完成。
有可能吗?
答案 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;