From 91c134faa787f5aed880a339daa05768a0fa58b3 Mon Sep 17 00:00:00 2001 From: Aaron Roberts Date: Fri, 19 Jun 2026 23:12:33 +0100 Subject: [PATCH] Add updated_at column and trigger for Qdrant re-sync detection Adds updated_at TIMESTAMPTZ to ocr_jobs, stamped automatically by a BEFORE UPDATE trigger. The sync process can use updated_at > qdrant_synced_at to detect jobs that need re-ingestion after edits or reviews. Co-Authored-By: Claude Sonnet 4.6 --- backend/database.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/backend/database.py b/backend/database.py index 4d5f1ed..5c99e98 100644 --- a/backend/database.py +++ b/backend/database.py @@ -58,6 +58,25 @@ def init_db(): ALTER TABLE ocr_jobs ADD COLUMN IF NOT EXISTS qdrant_synced_at TIMESTAMPTZ """) + cur.execute(""" + ALTER TABLE ocr_jobs + ADD COLUMN IF NOT EXISTS updated_at TIMESTAMPTZ + """) + # Trigger function: stamp updated_at on every row update + cur.execute(""" + CREATE OR REPLACE FUNCTION set_updated_at() + RETURNS TRIGGER AS $$ + BEGIN + NEW.updated_at = NOW(); + RETURN NEW; + END; + $$ LANGUAGE plpgsql + """) + cur.execute(""" + CREATE OR REPLACE TRIGGER ocr_jobs_set_updated_at + BEFORE UPDATE ON ocr_jobs + FOR EACH ROW EXECUTE FUNCTION set_updated_at() + """) # Unique constraint: prevent duplicate (author, chapter, page) submissions. # Applies only when all three fields are non-null. cur.execute("""