以前、記事で TRIGGER 内の http post は http extension を使おうと言ったが、Docker Hub においてある postgresql イメージは pg_net しか持っていないかった。
仕方がないので、主要な機能は Vercel に持っていき、イベントトリガでは対象 ID を Vercel に向けて送信するようにしてみた。
CREATE OR REPLACE FUNCTION do_post()
RETURNS TRIGGER
LANGUAGE=plpsgl AS $$
DECLARE
BEGIN
net.http_post('https://example.com/api/deleter', jsonb_build_object('Content-Type', 'application/json'),
'{"ID", OLD."ID"}'
})
END;
$$;
DROP TRIGGER IF EXISTS on_user_deleted;
CREATE TRIGGER on_user_deleted AFTER DELETE ON "Users"
EXECUTE PROCEDURE do_post();
当然、net.http_post の実行は Users から削除された後になってしまうが、Vercel の API を呼び出すことが出来ている。
コメントを残す