From 0213459f33629e0e76fc97941c635b46f1f5b223 Mon Sep 17 00:00:00 2001 From: SIAX Agent Date: Sat, 7 Nov 2026 17:24:56 +0100 Subject: [PATCH] fix(sql): 022 canonical facts blir idempotent (DROP POLICY IF EXISTS) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CREATE POLICY saknade skydd mot omkörning, så en retry efter partiell körning skulle fastna på 'policy already exists'. Tabellerna använder redan CREATE TABLE/INDEX IF NOT EXISTS; policynivån görs nu likvärdig. Rubriken rättad från 020 till 022. Verifierat på scratch-databas: två körningar i rad OK, RLS ENABLE+FORCE, 3 policies, 11 index, cross-tenant INSERT nekad och tenant B ser 0 rader. --- sql/022_canonical_facts.sql | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sql/022_canonical_facts.sql b/sql/022_canonical_facts.sql index 70f0073..8326fd0 100644 --- a/sql/022_canonical_facts.sql +++ b/sql/022_canonical_facts.sql @@ -1,4 +1,4 @@ --- 020_canonical_facts.sql — 0pt canonical structured observations (X-800 / Scrape). +-- 022_canonical_facts.sql — 0pt canonical structured observations (X-800 / Scrape). -- -- 0pt owns normalized OBSERVED facts (what a source said, when, from which -- artifact). L0RE owns epistemic propositions/assertions and projections; it @@ -82,18 +82,21 @@ CREATE INDEX IF NOT EXISTS idx_canonical_relations_object ALTER TABLE opt_canonical_entities ENABLE ROW LEVEL SECURITY; ALTER TABLE opt_canonical_entities FORCE ROW LEVEL SECURITY; +DROP POLICY IF EXISTS opt_canonical_entities_tenant ON opt_canonical_entities; CREATE POLICY opt_canonical_entities_tenant ON opt_canonical_entities USING (tenant_id = current_setting('app.opt_canonical_tenant_id', true)) WITH CHECK (tenant_id = current_setting('app.opt_canonical_tenant_id', true)); ALTER TABLE opt_canonical_facts ENABLE ROW LEVEL SECURITY; ALTER TABLE opt_canonical_facts FORCE ROW LEVEL SECURITY; +DROP POLICY IF EXISTS opt_canonical_facts_tenant ON opt_canonical_facts; CREATE POLICY opt_canonical_facts_tenant ON opt_canonical_facts USING (tenant_id = current_setting('app.opt_canonical_tenant_id', true)) WITH CHECK (tenant_id = current_setting('app.opt_canonical_tenant_id', true)); ALTER TABLE opt_canonical_relations ENABLE ROW LEVEL SECURITY; ALTER TABLE opt_canonical_relations FORCE ROW LEVEL SECURITY; +DROP POLICY IF EXISTS opt_canonical_relations_tenant ON opt_canonical_relations; CREATE POLICY opt_canonical_relations_tenant ON opt_canonical_relations USING (tenant_id = current_setting('app.opt_canonical_tenant_id', true)) WITH CHECK (tenant_id = current_setting('app.opt_canonical_tenant_id', true));