【PostgreSQL】ストアド ~ INSERT / UPDATEを行い、それ以外はDELETE ~

■ はじめに

ストアド ~ UPDATE or INSERT を行う ~
https://dk521123.hatenablog.com/entry/2014/09/01/224134

で、INSERT / UPDATEを行う事はできたが、
それ以外のデータはゴミになるので削除したい。

【1】解決策

* 対象のテーブルに「更新日時」にあたる項目があれば、
 INSERT / UPDATEをした後に、
 その更新日時前のデータを削除対象にする

【1】サンプル

-- あくまでサンプル。変更する必要があり。
-- とりあえずイメージをSQL文にした
CREATE OR REPLACE FUNCTION update_Or_Insert_delete_Other_Person(
  targetId character(8),
  targetName character varying(100),
  targetSex character(1)
)
RETURNS TIMESTAMP AS
$$
DECLARE
  currentTime TIMESTAMP;
BEGIN
  currentTime := TIMESTAMP 'now';
  RAISE NOTICE 'currentTime = %', currentTime;
  
  UPDATE person SET
   name = targetName,
   sex = targetSex,
   updatedate = currentTime
  WHERE id = targetId;
  IF NOT found THEN
    BEGIN
      INSERT INTO person(
        id,
        name,
        sex,
        updatedate)
      VALUES (
        targetId,
        targetName,
        targetSex,
        currentTime);
    END;
  END IF;
  
  DELETE FROM person WHERE updatedate < currentTime;
  
  RETURN currentTime;
EXCEPTION WHEN unique_violation THEN
  RETURN null;
END;
$$
LANGUAGE plpgsql;

関連記事

ストアド ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2010/08/06/112528
ストアド ~ UPDATE or INSERT を行う ~
https://dk521123.hatenablog.com/entry/2014/09/01/224134