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 --
'Database > Postgresql' 카테고리의 다른 글
[Postgresql] Sql 쿼리 수행 시간 늘리기 (0) | 2022.09.25 |
---|---|
[Postgresql] max_connection 늘리기, 현재 connection 확인 (windows) (0) | 2022.08.17 |
[Postgresql] Upsert 구현 (insert ~ on conflict) (0) | 2022.05.08 |
[Postgresql] auto increment, sequence 처리방법 (0) | 2022.04.28 |
[Postgresql] Postgres db dump, restore (0) | 2022.01.14 |