🧐 🤔 그거 어떻게 쓰더라 🙄 😙

PostgreSQL 조회 혹은 없으면 삽입 후 값 반환 쿼리 예제

2024. 2. 23. Evergood Kim이가 씀

그냥 INSERT 하면 삽입이 안 된 경우에도 SERIAL 타입 컬럼의 기본값이 1씩 계속 증가하는데; 진짜로 기존 값이 없는 경우에만 새로 삽입하면서 SERIAL 값이 1씩 증가하는 쿼리

예시 스키마 및 테이블
CREATE SCHEMA "myschema";

CREATE TABLE "myschema"."atest" (
	id SERIAL,
	aa INTEGER,
	bb VARCHAR(10),
	PRIMARY KEY (id)
);
INSERT
WITH
"input_data" AS (
    SELECT 123 AS "aa", 'hello' AS "bb"
),
"existing" AS (
    SELECT *
    FROM "myschema"."atest"
    WHERE
        "id"     = (SELECT "id" FROM "input_data")
        AND "aa" = (SELECT "aa" FROM "input_data")
        AND "bb" = (SELECT "bb" FROM "input_data")
),
"inserted" AS (
    INSERT INTO "myschema"."atest" ("aa", "bb")
    SELECT "aa", "bb"
    FROM "input_data"
    WHERE NOT EXISTS (SELECT 1 FROM "existing")
    RETURNING *
)
SELECT * FROM "inserted"
UNION ALL
SELECT * FROM "existing"
728x90