ОШИБКА Postgres: двойное значение ключа нарушает ограничение уникальности - PullRequest
4 голосов
/ 11 февраля 2012

Таблица определена как

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

Он говорит об ошибке yntax на уровне или где "WHERE".

Как использовать оператор вставки при использовании предложения where, чтобы при выполнении того же запроса с использованием php он не возвращал ошибку

uid столбца уникален

1 Ответ

5 голосов
/ 12 февраля 2012

Оператор INSERT не поддерживает предложение 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 test (n) 
select 2 where 2 not in (select n from test where n = 2);

Таким образом, ваш запрос, предполагающий, что вы пытаетесь избежать появления ошибки на дублирующем ключе, должен выглядеть примерно так.

INSERT INTO users (uid) 
SELECT 123 WHERE 123 not in (SELECT uid FROM users WHERE uid = 123) ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...