[postgresql] UPSERT

  1. SQL- upsert 만드는 법 
    기존 오라클에서 사용하던 merge 구문효과를 postgresql 에서 사용하기 위해 UPSERT 문을 만들어 사용한다.

    1)

    INSERT INTO spider_count (spider, tally) VALUES ('Googlebot', 1);

    2)

    UPDATE spider_count SET tally=tally+1 WHERE date='today' AND spider='Googlebot';

    이와 같은 2개의 구문이 있다고 할 때,변환 방법은 다음 처럼 한다. upsert 라는 변수로 가정하고,

     $insert = "INSERT INTO spider_count (spider, tally) SELECT 'Googlebot', 1";

    $upsert = "UPDATE spider_count SET tally=tally+1 WHERE date='today' AND spider='Googlebot'";
  2. 위 2개의 변수를 아래 모양에 맞춰 넣는다.

    WITH upsert AS ($update RETURNING *) $insert WHERE NOT EXISTS (SELECT * FROM upsert);
    WITH upsert AS ( (UPDATE spider_count SET tally=tally+1 WHERE date='today' AND spider='Googlebot') RETURNING *) INSERT INTO spider_count(spider, tally) SELECT 'Goolgebot', 1 WHERE NOT EXISTS( SELECT * FROM upsert)


'프로그래밍 > SQL' 카테고리의 다른 글

[SQL] rownum, limit(top), order by 순서지정  (0) 2017.04.11
블로그 이미지

ohnewdev

배워서 남주자

,