Для такой таблицы:
CREATE TABLE Users(
id SERIAL PRIMARY KEY,
name TEXT UNIQUE
);
Какой будет правильная вставка с одним запросом для следующей операции:
Учитывая пользователя name
, вставьте новую запись и верните новый id
. Но если name
уже существует, просто верните id
.
Я знаю о новом синтаксисе в PostgreSQL 9.5 для ON CONFLICT(column) DO UPDATE/NOTHING
, но я не могу понять, как он может помочь, если вообще поможет, учитывая, что мне нужно вернуть id
.
Кажется, что RETURNING id
и ON CONFLICT
не принадлежат друг другу.
SELECT id FROM users WHERE name='text'
, проверить, найдено ли, а если нет, то выполнитьINSERT...
, что составляет 2 запроса, но теперь это кажется проще, чем вариант с одним запросом. Я не ожидал, что это будет так неловко. Я надеялся, что новыйON CONFLICT
поможет, но, увы, нет. Спасибо за ссылки! - person vitaly-t   schedule 18.03.2016