DEV Community

Stanislav Karol
Stanislav Karol

Posted on

Вставить запись в PostgeSQL, если таковой нет в таблице

Необходимо сделать такую возможность: Вставить уникальную запись в таблицу бд 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")
)
Enter fullscreen mode Exit fullscreen mode

Здесь соблюдается главное требование: записи должны быть уникальными.
Но задача состоит из двух шагов:

  1. Если такого тэга нет, то вставить название тэга,
  2. Вернуть id тэга по имени,- этот тэг будет или новый или старый.

Как это сделать одним запросом я не подскажу, но как сделать из двух, - пожалуйста (мне в этом помогла документация ):

INSERT INTO tags (name) 
SELECT 'Новость'
WHERE
    NOT EXISTS (
        SELECT id FROM tags WHERE name = 'Новость'
    )
-- RETURNING id -- Если второй шаг необязателен, то можно так сделать
;
select id from tags WHERE name = 'Новость';
Enter fullscreen mode Exit fullscreen mode

На правах ЖЖ, для себя, чтобы не забыть.

Discussion (0)