Вставить запись в PostgeSQL, если таковой нет в таблице
Stanislav Karol
Posted on July 4, 2021
Необходимо сделать такую возможность: Вставить уникальную запись в таблицу бд postgresql и вернуть id этой записи (даже если такая запись есть).
Например речь идёт о таблице tags:
CREATE TABLE "tags" (
"id" uuid NOT NULL DEFAULT uuid_generate_v4(),
"name" character varying NOT NULL,
CONSTRAINT "UQ_d90243459a697eadb8ad56e9092" UNIQUE ("name"),
CONSTRAINT "PK_e7dc17249a1148a1970748eda99" PRIMARY KEY ("id")
)
Здесь соблюдается главное требование: записи должны быть уникальными.
Но задача состоит из двух шагов:
- Если такого тэга нет, то вставить название тэга,
- Вернуть id тэга по имени,- этот тэг будет или новый или старый.
Как это сделать одним запросом я не подскажу, но как сделать из двух, - пожалуйста (мне в этом помогла документация ):
INSERT INTO tags (name)
SELECT 'Новость'
WHERE
NOT EXISTS (
SELECT id FROM tags WHERE name = 'Новость'
)
-- RETURNING id -- Если второй шаг необязателен, то можно так сделать
;
select id from tags WHERE name = 'Новость';
На правах ЖЖ, для себя, чтобы не забыть.
💖 💪 🙅 🚩
Stanislav Karol
Posted on July 4, 2021
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.