Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.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
Postgresql Postgres错误:重复的键值违反了唯一约束_Postgresql - Fatal编程技术网

Postgresql Postgres错误:重复的键值违反了唯一约束

Postgresql Postgres错误:重复的键值违反了唯一约束,postgresql,Postgresql,表定义为 create table users ( serial_no integer PRIMARY KEY DEFAULT nextval('serial'), uid bigint NOT NULL, username varchar(32), name text, CONSTRAINT production UNIQUE(uid) ); 我使用了这个查询 INSERT INTO users (uid) values(123) ; 它说重复的键值违反了唯一约束。所以我在谷歌上找到了这个

表定义为

create table users (
serial_no integer PRIMARY KEY DEFAULT nextval('serial'),
uid bigint NOT NULL,
username varchar(32),
name text,
CONSTRAINT production UNIQUE(uid)
);
我使用了这个查询

INSERT INTO users (uid) values(123) ;
它说重复的键值违反了唯一约束。所以我在谷歌上找到了这个

所以我试过了

INSERT INTO users (uid) values(123) 
where 1 in (select 1 from users where uid = 123) ;
它说在“WHERE”或“WHERE”附近有一个错误

如何使用where子句使用insert into语句,以便在使用php运行同一查询时不会返回错误

列uid是唯一的

不支持WHERE子句。运行这个

create table test (
  n integer primary key
);

insert into test values (1);
insert into test values (2) where true;
由于WHERE子句,这将导致语法错误

但是,SELECT语句可以有WHERE子句。这将在测试表中一次性插入2。你想跑多少次就跑多少次;它不会引起错误。(但最多只能插入一行。)

因此,假设您试图避免在重复键上引发错误,那么您的查询应该是这样的

INSERT INTO users (uid) 
SELECT 123 WHERE 123 not in (SELECT uid FROM users WHERE uid = 123) ;

什么是表格定义?错误信息似乎非常清楚。表上似乎有一个唯一的约束,阻止您插入多个uid=123的行。已经有一行uid为123。数据库运行正常。您的问题是什么?如果执行此查询,
从uid=123的用户中选择count(*),你得到了什么?@AnubhavAgarwal:那么你已经有一行的唯一uid为123。你为什么要插入两行这样的内容,当你试图违反一个独特的约束时,你希望发生什么?Postgres的人是不友好的!
INSERT INTO users (uid) 
SELECT 123 WHERE 123 not in (SELECT uid FROM users WHERE uid = 123) ;