DEV Community

Stanislav Karol
Stanislav Karol

Posted on

3 3

Вставить запись в 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

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

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

Top comments (0)

Billboard image

Create up to 10 Postgres Databases on Neon's free plan.

If you're starting a new project, Neon has got your databases covered. No credit cards. No trials. No getting in your way.

Try Neon for Free →

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay