Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Postgres:使用插入和选择时出现问题_Sql_Postgresql - Fatal编程技术网

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的答案,因为虽然它实际上没有回答这个问题,但它确实给了我重要的信息,我曾经用这些信息来解决这个问题。