PostgreSQL 조회 혹은 없으면 삽입 후 값 반환 쿼리 예제
주소: /entry/PostgreSQL-조회-혹은-없으면-삽입-후-값-반환
그냥 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
GitHub
GDrive
RSS