55 lines
1.6 KiB
PL/PgSQL
55 lines
1.6 KiB
PL/PgSQL
-- Créer le schéma audit
|
||
|
||
CREATE SCHEMA IF NOT EXISTS audit;
|
||
|
||
-- 1️⃣ Créer la table d’audit
|
||
CREATE TABLE audit.parcelle_audit_log (
|
||
audit_id SERIAL PRIMARY KEY,
|
||
parcelle_id BIGINT,
|
||
action VARCHAR(10),
|
||
changed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
old_data JSONB,
|
||
new_data JSONB
|
||
);
|
||
|
||
-- 2️⃣ Créer la fonction d’audit
|
||
CREATE OR REPLACE FUNCTION audit.audit_parcelle_changes()
|
||
RETURNS TRIGGER AS $$
|
||
BEGIN
|
||
IF (TG_OP = 'UPDATE') THEN
|
||
INSERT INTO audit.parcelle_audit_log (parcelle_id, action, old_data, new_data)
|
||
VALUES (
|
||
OLD.id,
|
||
TG_OP,
|
||
to_jsonb(OLD),
|
||
to_jsonb(NEW)
|
||
);
|
||
RETURN NEW;
|
||
ELSIF (TG_OP = 'INSERT') THEN
|
||
INSERT INTO audit.parcelle_audit_log (parcelle_id, action, new_data)
|
||
VALUES (
|
||
NEW.id,
|
||
TG_OP,
|
||
to_jsonb(NEW)
|
||
);
|
||
RETURN NEW;
|
||
ELSIF (TG_OP = 'DELETE') THEN
|
||
INSERT INTO audit.parcelle_audit_log (parcelle_id, action, old_data)
|
||
VALUES (
|
||
OLD.id,
|
||
TG_OP,
|
||
to_jsonb(OLD)
|
||
);
|
||
RETURN OLD;
|
||
END IF;
|
||
END;
|
||
$$ LANGUAGE plpgsql;
|
||
|
||
-- 3️⃣ Créer le trigger
|
||
CREATE TRIGGER trigger_audit_parcelle
|
||
AFTER INSERT OR UPDATE OR DELETE ON parcelle
|
||
FOR EACH ROW
|
||
EXECUTE FUNCTION audit.audit_parcelle_changes();
|
||
|
||
GRANT USAGE ON SCHEMA audit TO infocad_user;
|
||
GRANT INSERT, SELECT ON audit.parcelle_audit_log TO infocad_user; |