dify/knowledge-fs/packages/database/migrations/0003_projection_set_publications.postgres.sql
Jyong 4ee43b8afc chore: migrate knowledge-fs source tree
Import the committed KnowledgeFS snapshot dc4072ee302317145612087ce7440851dc329fd0 under knowledge-fs/ without its Git history, local IDE settings, or build artifacts.
2026-07-20 04:54:20 -04:00

53 lines
2.2 KiB
SQL

-- Knowledge Platform schema migration
-- Migration id: 0003_projection_set_publications
-- Dialect: postgres
-- A publication is an immutable, tenant-scoped candidate generation. The mutable head lives in a
-- separate row so publication is one compare-and-swap instead of a sequence of visible row flips.
CREATE TABLE IF NOT EXISTS "projection_set_publications" (
"id" UUID PRIMARY KEY NOT NULL,
"tenant_id" VARCHAR(255) NOT NULL,
"knowledge_space_id" UUID NOT NULL,
"fingerprint" VARCHAR(86) NOT NULL,
"projection_version" INTEGER NOT NULL,
"status" VARCHAR(16) NOT NULL,
"superseded_by_fingerprint" VARCHAR(86),
"metadata" JSONB NOT NULL,
"created_at" TIMESTAMPTZ NOT NULL,
"updated_at" TIMESTAMPTZ NOT NULL,
FOREIGN KEY ("knowledge_space_id") REFERENCES "knowledge_spaces" ("id") ON DELETE CASCADE
);
CREATE UNIQUE INDEX IF NOT EXISTS "projection_set_publications_space_fingerprint_uq"
ON "projection_set_publications" ("tenant_id", "knowledge_space_id", "fingerprint");
CREATE UNIQUE INDEX IF NOT EXISTS "projection_set_publications_space_id_uq"
ON "projection_set_publications" ("tenant_id", "knowledge_space_id", "id");
CREATE INDEX IF NOT EXISTS "projection_set_publications_space_status_updated_idx"
ON "projection_set_publications" (
"tenant_id",
"knowledge_space_id",
"status",
"updated_at",
"fingerprint",
"id"
);
CREATE TABLE IF NOT EXISTS "projection_set_publication_heads" (
"id" UUID PRIMARY KEY NOT NULL,
"tenant_id" VARCHAR(255) NOT NULL,
"knowledge_space_id" UUID NOT NULL,
"publication_id" UUID NOT NULL,
"head_revision" INTEGER NOT NULL,
"created_at" TIMESTAMPTZ NOT NULL,
"updated_at" TIMESTAMPTZ NOT NULL,
FOREIGN KEY ("knowledge_space_id") REFERENCES "knowledge_spaces" ("id") ON DELETE CASCADE,
FOREIGN KEY ("tenant_id", "knowledge_space_id", "publication_id")
REFERENCES "projection_set_publications" ("tenant_id", "knowledge_space_id", "id")
ON DELETE RESTRICT
);
CREATE UNIQUE INDEX IF NOT EXISTS "projection_set_publication_heads_space_uq"
ON "projection_set_publication_heads" ("tenant_id", "knowledge_space_id");
CREATE UNIQUE INDEX IF NOT EXISTS "projection_set_publication_heads_publication_uq"
ON "projection_set_publication_heads" ("publication_id");