그냥 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