У меня есть таблица tagс 2 столбцами: id(UUID) и name(текст). Теперь я хочу вставить новый тег в таблицу, но если тег уже существует, я хочу просто получить idсуществующую запись.
Я предположил, что я мог бы просто использовать ON CONFLICT DO NOTHINGв сочетании с RETURNING "id":
INSERT INTO
"tag" ("name")
VALUES( 'foo' )
ON CONFLICT DO NOTHING
RETURNING "id";
Но это возвращает пустой набор результатов, если тег с именем «foo» уже существует.
Затем я изменил запрос, чтобы использовать предложение noop DO UPDATE:
INSERT INTO
"tag" ("name")
VALUES( 'foo' )
ON CONFLICT ("name") DO UPDATE SET "name" = 'foo'
RETURNING "id";
Это работает как задумано, но это несколько сбивает с толку, потому что я просто устанавливаю имя на уже существующее значение.
Это способ решить эту проблему или я упускаю более простой подход?
ERROR: missing FROM-clause entry for table "excluded"при использовании DO NOTHING.
returning excluded.id?