본문 바로가기
Programming/Postgresql

postgresql merge(upsert) 구현하기

by 제타 2019. 7. 27.
반응형

postgresql merge(upsert+delete) 구현하는 방법이다.

이걸 1트랜잭션으로 묶거나 프로시저나 펑션 등으로 호출하면 된다.

 

lock table test_tbl in exclusive mode;

 

    delete from test_tbl

    where not exists ( select 1

                            from tmp_test_tbl

                            where test_tbl.pk = tmp_test_tbl.pk ) ;

 

    update  test_tbl

    set pk = tmp_test_tbl.pk

      , c1  = tmp_test_tbl.c1

      , c2  = tmp_test_tbl.c2

      , c3  = tmp_test_tbl.c3

    from tmp_test_tbl

    where test_tbl.pk = tmp_test_tbl.pk ;

 

    insert into test_tbl (

pk

, c1

, c2

, c3

) select tmp_test_tbl.pk

         , tmp_test_tbl.c1

         , tmp_test_tbl.c2

         , tmp_test_tbl.c3

    from tmp_test_tbl

    left join test_tbl

                         on  test_tbl.pk = tmp_test_tbl.pk

    where test_tbl.pk is null;

반응형