Для таблицы, как этот:Получить Id от условного INSERT
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
не относятся друг к другу.
Эта логика действительно должна быть в базе данных? – Krismorte
@ErwinBrandstetter это кажется более сложным, чем я думал. Я пытался выяснить, стоит ли искать решение с одним запросом в приложении Node.js или просто придерживаться 'SELECT id FROM users WHERE name = 'text'', проверить, найден ли, а если нет, INSERT ... ', который представляет собой 2 запроса, но теперь это выглядит проще, чем вариант с одним запросом. Я не ожидал, что это будет неудобно. Я надеялся, что новый «ПО КОНФЛИКТУ» поможет, но, увы, это не так. Спасибо за ссылки! –
Вопрос очень сложный, как только вступает в игру одновременный доступ к записи. Я добавлю еще один ответ. –