У мене є таблиця tagз 2 стовпцями: id(uuid) та name(text). Зараз я хочу вставити новий тег у таблицю, але якщо тег уже існує, я хочу просто отримати idіснуючий запис.
Я припускав, що я можу просто використовувати ON CONFLICT DO NOTHINGв поєднанні з RETURNING "id":
INSERT INTO
"tag" ("name")
VALUES( 'foo' )
ON CONFLICT DO NOTHING
RETURNING "id";
Але це повертає порожній набір результатів, якщо тег із назвою "foo" вже існує.
Потім я змінив запит, щоб використовувати DO UPDATEпункт noop :
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?