오라클을 주로 사용하던 이들은 다른 DBMS에서 아쉬운 것들이 몇가지 있죠. 현재 사용중인 PostgreSQL의 경우, 오라클의 자유로운 db link와 merge 등이 아주 그립습니다. 그래서 이 merge 기능을 대신하는 방법을 찾아봤습니다.

수정 가능한 WITH CTE 구문을 이용한 merge 기능 구현

WITH TEST AS (
UPDATE world_human A
SET cel_phone = B.cel_phone, email_addr = B.email_addr
FROM servay B
WHERE A.human_id = B.human_id
RETURNING A.*)
INSERT INTO world_human(human_id, cel_phone, email_addr)
SELECT C.human_id, C.cel_phone, C.email_addr
FROM servay C
WHERE C.human_id NOT IN (SELECT human_id FROM TEST)
;

이렇게하면 MERGE와 동일하게 입력 및 수정을 하나의 쿼리로 실행할 수 있습니다.

아 조건이 하나있는데, PostgreSQL 버전이 9.1.3이어야합니다. 9.0 버전에서는 안되는걸 테스트와 메뉴얼로 확인 했습니다. 9.1.2나 9.1.1에서도 잘 되는지는 확인을 못 했습니다.

iPhone 에서 작성된 글입니다.
YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST