Как в PostgreSQL добавить строку, если такой еще нет

Рейтинг: 0Ответов: 1Опубликовано: 06.02.2023

Нужно чтобы в таблицу добавлялось имя, если его нет среди существующих, в ином случае просто вернуть все имена,

IF EXISTS (SELECT * FROM names WHERE name = 'John') THEN 
   SELECT * FROM names WHERE name = 'John' 
ELSE 
   INSERT INTO names ('John')

Пытаюсь запустить в PostgreSQL такой код и получаю ошибку:

введите сюда описание изображения

Ответы

▲ 1Принят

Для начала надо добавить уникальный ключ для поля name

Чтобы PostgrSQL сам проверял наличие поля с таким значением и не позволял вставлять запись если запись уже есть.

В этом случае можно делать просто

INSERT INTO names ('John');

и обрабатывать ошибки при данном запросе.

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

INSERT INTO names ('John') ON CONFLICT DO NOTHING;

Т.е. точно так же вставляется запись, но если она уже есть в таблице и возникает ошибка, то на эту ошибку сервер ничего не делает и продолжает работу дальше.

В качестве бонуса можно в случае конфликта например изменять какие-то другие поля в данной строке, которая уже есть в таблице

INSERT INTO names ('John') ON CONFLICT DO UPDATE <здесь изменение значения полей>;