본문 바로가기

Database/Postgresql

[Postgresql] RETURNING 활용 예제

Postgresql의 RETURNING 문을 사용하면 insert, delete, update 시 수행된 행을 return 받을 수 있고 이를 응용하여 여러 step을 하나의 쿼리로 수행해 볼 수 있다.

단일 Insert 예제

테스트 전 테이블 내용

CREATE TABLE users (
    user_id serial PRIMARY KEY,
    NAME VARCHAR(20)
)

CREATE TABLE users_backup (
    user_id serial PRIMARY KEY,
    NAME VARCHAR(20)
)

 

Insert returning 예제

WITH rows AS (
    INSERT INTO users VALUES (10, '테스트') RETURNING user_id
)
INSERT INTO users_backup (user_id, name)
    SELECT user_id, '뉴테스트' AS name
    FROM rows;

 

위 명령 실행 결과 users 테이블의 10번 row가 삽입되어 있고 users_backup 테이블에 10번 id, 뉴테스트 row가 추가되어 있음을 확인할 수 있다.

다중 Insert 예제

 

테스트 전 테이블 내용

CREATE TABLE users (
    user_id serial PRIMARY KEY,
    NAME VARCHAR(20)
)

CREATE TABLE users_detail (
    user_id serial PRIMARY KEY,
    detail VARCHAR(20)
)

CREATE TABLE users_backup (
    user_id serial PRIMARY KEY,
    NAME VARCHAR(20)
)

 

users 테이블과, users_detail 테이블에 row를 삽입하고 두개의 정보를 조합하여 users_backup 테이블에 새롭게 insert 하는 예제

WITH new_user AS (
    INSERT INTO users (user_id, name)
    VALUES (20, '테스트') RETURNING *
), new_user_detail AS (
    INSERT INTO users_detail (user_id, detail)
    VALUES (20, '테스트 유저') RETURNING *
)
INSERT INTO users_backup (user_id, name)
    SELECT new_user.user_id, new_user_detail.detail ||' 추가'
    FROM new_user, new_user_detail;

 

-- The End --