Sql Postgres:使用插入和选择时出现问题
我有一个定义如下的表:Sql Postgres:使用插入和选择时出现问题,sql,postgresql,Sql,Postgresql,我有一个定义如下的表: CREATE TABLE wp_master ( gid integer NOT NULL DEFAULT nextval('wp_master_gid_seq'::regclass), name character varying(80), .... type integer DEFAULT 4, CONSTRAINT p_key PRIMARY KEY (gid), ); 我想从另一个表向表中插入数据,以便 insert into wp_mast
CREATE TABLE wp_master (
gid integer NOT NULL DEFAULT nextval('wp_master_gid_seq'::regclass),
name character varying(80),
....
type integer DEFAULT 4,
CONSTRAINT p_key PRIMARY KEY (gid),
);
我想从另一个表向表中插入数据,以便
insert into wp_master ( name, .... type) select "NAME", ...., 1 from ."Tiri2011";
但我得到了一个错误:
ERROR: duplicate key value violates unique constraint "p_key"
DETAIL: Key (gid)=(2) already exists.
为什么postgres试图将任何内容放入gid字段,而我却没有明确地将其包含在列列表中?我假设gid从序列中获取其值
Russell正在尝试插入
wp\u master\u gid\u seq序列的下一个值。将id列声明为serial
(自动递增)将创建一个序列,该序列具有自动递增的最后一个插入id的存储值。如果在任何时候手动插入gid值,它会绕过序列,并且自动增量功能可能会中断,因为序列值没有相应地更新
修复它的最简单方法是将序列的值更改为(表的最大gid值)+1。只要执行一次,你就可以了
select setval('wp_master_gid_seq', coalesce((select max(id)+1 from wp_master), 1), false)
我以为我已经做到了:创建SEQUENCE base.wp_master_gid_seq INCREMENT 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 114 CACHE 1;我也尝试过setval,但问题仍然存在<代码>从base.wp_master中选择最大值(gid)代码>返回113我已经找到了答案。问题是序列在另一个模式中,所以无论我对与表相同的模式中的序列做了什么,它都没有效果。我接受了Foibs的答案,因为虽然它实际上没有回答这个问题,但它确实给了我重要的信息,我曾经用这些信息来解决这个问题。