Как в PostgreSQL добавить строку, если такой еще нет
Нужно чтобы в таблицу добавлялось имя, если его нет среди существующих, в ином случае просто вернуть все имена,
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 <здесь изменение значения полей>;
