Files
query-orchestration/internal/database/migrations/00000000000129_create_document_custom_metadata.up.sql
Jay Brown 17fc813823 Merged in feature/mutable-metadata1 (pull request #221)
M1, M2 and M3 complete

* M1, M2 and M3 complete

* review changes

* docs

* docs
2026-04-16 23:11:26 +00:00

40 lines
1.9 KiB
SQL

-- Mutable metadata feature, milestone 2.1: document_custom_metadata table.
-- Stores every historical version of a document's custom metadata payload
-- against its bound schema (schema is looked up via documents.custom_schema_id
-- at read time, not stored here).
--
-- See plan Section 4.3 of plans/mutable.metadata.plan.combo.v4.md for the
-- canonical definition.
--
-- v4 simplifications compared to v3:
-- 1. No `schema_id` column. The binding lives on the document row
-- (documents.custom_schema_id); storing it again here would allow the
-- two copies to drift. Reads join through documents to
-- client_metadata_schemas to decorate the response.
-- 2. No `current_document_custom_metadata` view. The "current" row is
-- fetched with a simple ORDER BY version DESC LIMIT 1 query backed by
-- idx_dcm_doc_version_desc.
-- 3. ON DELETE CASCADE on the document_id FK replaces v3's explicit
-- delete-cascade workstream: dropping a document also removes its
-- metadata history automatically.
CREATE TABLE document_custom_metadata (
id uuid NOT NULL DEFAULT uuid_generate_v7(),
document_id uuid NOT NULL,
metadata jsonb NOT NULL,
version int NOT NULL,
created_at timestamptz NOT NULL DEFAULT NOW(),
created_by varchar(255) NOT NULL,
CONSTRAINT pk_document_custom_metadata PRIMARY KEY (id),
CONSTRAINT uq_doc_custom_metadata_version UNIQUE (document_id, version),
CONSTRAINT fk_dcm_document_id FOREIGN KEY (document_id)
REFERENCES documents(id) ON DELETE CASCADE
);
-- The single index v4 needs on this table: backs the "current metadata"
-- lookup (ORDER BY version DESC LIMIT 1). v3 also defined idx_dcm_schema_id;
-- v4 intentionally omits it because the schema_id column does not exist.
CREATE INDEX idx_dcm_doc_version_desc
ON document_custom_metadata(document_id, version DESC);