feat(supabase): sync knowledge documents and prune tombstones daily
knowledge_documents deletions now leave a sync tombstone and have a cursor index and Realtime, so the desktop mirror can follow them. pg_cron runs prune_sync_tombstones_v1 every day at 03:17 UTC with the 180-day window.
This commit is contained in:
parent
bde8565fd2
commit
cee4ab9317
1 changed files with 55 additions and 0 deletions
|
|
@ -0,0 +1,55 @@
|
|||
-- Knowledge base joins the cross-device mirror; tombstones get a retention job.
|
||||
--
|
||||
-- 1. knowledge_documents deletions leave a tombstone like the other synced
|
||||
-- tables, and a (user_id, updated_at, id) cursor index backs keyset pulls.
|
||||
-- Chunks are re-read with their document, so they need neither.
|
||||
-- 2. pg_cron prunes tombstones daily with the 180-day default of
|
||||
-- prune_sync_tombstones_v1 (a device offline longer than that resyncs fully).
|
||||
|
||||
BEGIN;
|
||||
|
||||
-- 1) knowledge_documents ---------------------------------------------------------
|
||||
ALTER TABLE public.sync_tombstones DROP CONSTRAINT IF EXISTS sync_tombstones_table_name_check;
|
||||
ALTER TABLE public.sync_tombstones
|
||||
ADD CONSTRAINT sync_tombstones_table_name_check CHECK (table_name IN (
|
||||
'history',
|
||||
'dictionary',
|
||||
'meetings',
|
||||
'meeting_memos',
|
||||
'meeting_documents',
|
||||
'memo_tags',
|
||||
'custom_instructions',
|
||||
'user_templates',
|
||||
'knowledge_documents'
|
||||
));
|
||||
|
||||
DROP TRIGGER IF EXISTS record_sync_tombstone_v1 ON public.knowledge_documents;
|
||||
CREATE TRIGGER record_sync_tombstone_v1
|
||||
AFTER DELETE ON public.knowledge_documents
|
||||
FOR EACH ROW EXECUTE FUNCTION public.record_sync_tombstone_v1();
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_knowledge_documents_sync_cursor
|
||||
ON public.knowledge_documents(user_id, updated_at, id);
|
||||
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM pg_publication_tables
|
||||
WHERE pubname = 'supabase_realtime' AND schemaname = 'public' AND tablename = 'knowledge_documents'
|
||||
) THEN
|
||||
ALTER PUBLICATION supabase_realtime ADD TABLE public.knowledge_documents;
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
COMMIT;
|
||||
|
||||
-- 2) Tombstone retention ---------------------------------------------------------
|
||||
-- Outside the transaction: extension creation and cron scheduling are
|
||||
-- idempotent, and cron.schedule with an existing job name replaces it.
|
||||
CREATE EXTENSION IF NOT EXISTS pg_cron WITH SCHEMA pg_catalog;
|
||||
|
||||
SELECT cron.schedule(
|
||||
'prune-sync-tombstones',
|
||||
'17 3 * * *',
|
||||
$$SELECT public.prune_sync_tombstones_v1()$$
|
||||
);
|
||||
Loading…
Add table
Add a link
Reference in a new issue