C.W.K.
Stream
Lesson 06 of 16 · published

RETURNING: PostgreSQL 의 비밀 무기

~10 min · queries, write

Level 0스키마 새싹
0 XP0/86 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

영수증 받기

대부분 SQL DB 가 INSERT/UPDATE/DELETE 를 fire-and-forget 으로 돌림. PostgreSQL 의 RETURNING 이 그것들을 데이터 반환하는 연산으로 바꿈 — 영향받은 행이 SELECT 한 것처럼 돌아옴.

이게 왜 중요

고전 대안은 'INSERT, 그 다음 SELECT 로 새 ID 가져오기'. 라운드트립 두 번 + insert 와 select 사이 race condition. RETURNING 이 한 statement 에 둘 다 atomic. 레이턴시 반감, race 제거.

Atomic chain 위해 CTE 와 결합

DELETE ... RETURNING 을 CTE 안에 감싸고 결과를 다른 데 INSERT — 한 statement 에 'A 에서 삭제 + B 로 복사' atomic.

Code

INSERT/UPDATE/DELETE 와 RETURNING·sql
INSERT INTO users (name, email)
VALUES ('Alice', 'alice@example.com')
RETURNING id, created_at;

UPDATE products SET price = price * 0.9 WHERE category = 'clearance'
RETURNING id, name, price AS new_price;

DELETE FROM sessions WHERE expires_at < now()
RETURNING id, user_id, expires_at;
CTE 로 atomic delete-and-archive·sql
WITH archived AS (
  DELETE FROM orders
  WHERE status = 'cancelled'
    AND placed_at < now() - INTERVAL '1 year'
  RETURNING *
)
INSERT INTO orders_archive
SELECT * FROM archived;

External links

Exercise

코드의 기존 'insert 후 ID 가져오려 select' 패턴 잡고 단일 INSERT ... RETURNING 으로 재작성. 레이턴시 개선 측정.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.