我有一个表,它在插入记录时使用序列自动生成主键。但是,序列产生负值。
如何强制只生成正值,并且有办法随机生成id(尤其是varchar类型)
CREATE TABLE public.questionnaries
(
id integer NOT NULL DEFAULT nextval('questionnaries_id_seq'::regclass),
personname character varying(255) NOT NULL,
question character varying(255) NOT NULL,
response character varying(255) NOT NULL,
CONSTRAINT questionnaries_pkey PRIMARY KEY (id)
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.questionnaries
OWNER TO postgres;
CREATE SEQUENCE public.questionnaries_id_seq
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 6
CACHE 1;
ALTER TABLE public.questionnaries_id_seq
OWNER TO postgres;
答案 0 :(得分:2)
首先创建一个如下所示的序列。你想要开始的那个号码,例如0或100。
CREATE SEQUENCE questionnaries_id_seq START 0;
你也可以查询
SELECT nextval('questionnaries_id_seq');
答案 1 :(得分:1)
序列在两种情况下生成负值,
1#您已创建序列并以负数(“ - 1”)指定INCREMENT BY值。
2#序列INCREMENT BY是正的和正确的形式但是,序列达到它们的MAX值,这就是它开始生成序列的MIN值的原因。
有两种解决方案,
使用“NO MAXVALUE”和序列中的“NO CYCLE”参数,如下所示。
CREATE SEQUENCE <> NO MAXVALUE START WITH 0 INCREMENT BY 1 NO CYCLE;
使用“SERIAL”通过PostgreSQL生成数值。
CREATE TABLE table_name (
column_1 integer PRIMARY KEY DEFAULT nextval('serial'),
column_2 varchar(40) NOT NULL
);