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) ;