Skip to main content

Command Palette

Search for a command to run...

postgresql trigger ile password degisikligi loglamak

Published

postgresql'de insert/update/delete islemleri sonrasina hook olusturmak mumkun. bu hooklar ile de bir suru degisik senaryoyu db'ye yaptirabiliriz.

ornegin userlarin yaptigi sifre degisikliklerini baska bir tabloda tutmak istiyoruz, bu akis tamamiyle db tarafinda halledilebilir (iyidir kotudur orasi size kalmis tabii).

log_user_password_changes adinda bir fonksiyon olusturup, user tablosunda update yaptildiginda bu fonksiyonu trigger ettirelim.

CREATE OR REPLACE FUNCTION log_user_password_changes()
  RETURNS TRIGGER 
  LANGUAGE PLPGSQL
  AS
$$
BEGIN
    IF NEW.password <> OLD.password THEN
        --- eski sifreyi db'ye yazalim
         INSERT INTO user_password_changes(user_id, password, changed_on)
         VALUES(OLD.id, OLD.password, now());

        --- ayni user icin 90 gunden eski degisiklikleri de silelim
        DELETE from user_password_changes WHERE user_id = OLD.id and changed_on <= current_timestamp - ('90 days')::interval;
    END IF;

    RETURN NEW;
END;
$$
CREATE TRIGGER user_password_change
    AFTER UPDATE ON users
    FOR EACH ROW
    EXECUTE PROCEDURE log_user_password_changes();

demo:

47 views