Premiere commit - Omika
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
-- ============================================================
|
||||
-- Omika Diagnostic Center -- 015_diagnostics_retention_untreated.sql
|
||||
-- Rétention : ne pas purger les erreurs non traitées (privilège SELECT colonne-ciblé).
|
||||
-- ============================================================
|
||||
-- TO RUN ON SRV-OMIKA as PostgreSQL superuser (e.g. psql -U postgres -d <base> -f 015_...),
|
||||
-- AFTER 004 (SELECT/DELETE sur diagnostic_event) et 012 (table diagnostics_tasks).
|
||||
--
|
||||
-- Guarantees :
|
||||
-- - PostgreSQL 18 compatible.
|
||||
-- - Idempotent : re-running is a no-op (GRANT is idempotent).
|
||||
-- - Non destructive : NO DROP, NO DELETE/TRUNCATE, no data removal.
|
||||
-- - NO password, NO secret.
|
||||
--
|
||||
-- Règle de conservation : la purge DiagnosticRetentionWorker supprime un événement
|
||||
-- ancien selon DEUX cas :
|
||||
-- 1) événement NON-erreur (trace/debug/info/warning, ou level NULL) → toujours purgé ;
|
||||
-- 2) événement d'ERREUR (error/critical) → purgé SEULEMENT si son groupe possède une
|
||||
-- tâche (diagnostics_tasks) en statut TERMINAL (Resolved/Rejected). Une erreur non
|
||||
-- traitée (aucune tâche, ou Todo/InProgress) est conservée même au-delà du cutoff.
|
||||
--
|
||||
-- Le DELETE joint donc diagnostics_tasks sur l'identifiant URL-safe du groupe (recalculé
|
||||
-- en SQL, sans colonne fingerprint) :
|
||||
--
|
||||
-- DELETE FROM diagnostic_event
|
||||
-- WHERE id IN (
|
||||
-- SELECT id FROM diagnostic_event
|
||||
-- WHERE timestamp_utc < @cutoff
|
||||
-- AND (
|
||||
-- level IS NULL OR LOWER(level) NOT IN ('error', 'critical') OR
|
||||
-- (LOWER(level) IN ('error', 'critical') AND <group_url_identifier recalculé> IN (
|
||||
-- SELECT group_url_identifier FROM diagnostics_tasks
|
||||
-- WHERE LOWER(status) IN ('resolved','rejected')
|
||||
-- ))
|
||||
-- )
|
||||
-- ORDER BY timestamp_utc ASC, id ASC
|
||||
-- LIMIT @batchSize
|
||||
-- )
|
||||
--
|
||||
-- Jusqu'ici le rôle worker (omika_diagnostics_worker) n'avait AUCUN droit sur
|
||||
-- diagnostics_tasks (012). On accorde le MINIMUM pour le rapprochement : SELECT
|
||||
-- UNIQUEMENT sur group_url_identifier (la clé) et status (le statut terminal).
|
||||
-- NO SELECT sur title/description/cause (notes de support, potentiellement sensibles),
|
||||
-- NO SELECT sur assignee/created_by (usernames), NO UPDATE/INSERT/DELETE.
|
||||
-- ============================================================
|
||||
|
||||
GRANT SELECT (group_url_identifier, status)
|
||||
ON TABLE diagnostics_tasks TO omika_diagnostics_worker;
|
||||
|
||||
-- ============================================================
|
||||
-- END 015. Ordre serveur : 001 -> 002 -> ... -> 013 -> 014 -> 015.
|
||||
-- ============================================================
|
||||
Reference in New Issue
Block a user