migration.sql•2.16 kB
-- CreateExtension
CREATE EXTENSION IF NOT EXISTS "vector";
-- CreateEnum
CREATE TYPE "JobStatus" AS ENUM ('pending', 'running', 'completed', 'failed');
-- CreateTable
CREATE TABLE "documents" (
"id" TEXT NOT NULL,
"url" TEXT NOT NULL,
"title" TEXT NOT NULL,
"content" TEXT NOT NULL,
"metadata" JSONB NOT NULL,
"crawl_date" TIMESTAMP(3) NOT NULL,
"level" INTEGER NOT NULL,
"parent_document_id" TEXT,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "documents_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "chunks" (
"id" TEXT NOT NULL,
"document_id" TEXT NOT NULL,
"content" TEXT NOT NULL,
"embedding" vector(1536) NOT NULL,
"metadata" JSONB NOT NULL,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "chunks_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "jobs" (
"id" TEXT NOT NULL,
"url" TEXT NOT NULL,
"status" "JobStatus" NOT NULL DEFAULT 'pending',
"progress" DOUBLE PRECISION NOT NULL DEFAULT 0,
"start_date" TIMESTAMP(3) NOT NULL,
"end_date" TIMESTAMP(3),
"error" TEXT,
"stats" JSONB NOT NULL DEFAULT '{ "pagesProcessed": 0, "pagesSkipped": 0, "totalChunks": 0 }',
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "jobs_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE INDEX "documents_url_idx" ON "documents"("url");
-- CreateIndex
CREATE INDEX "documents_title_idx" ON "documents"("title");
-- CreateIndex
CREATE INDEX "documents_crawl_date_idx" ON "documents"("crawl_date");
-- CreateIndex
CREATE INDEX "chunks_embedding_idx" ON "chunks"("embedding");
-- AddForeignKey
ALTER TABLE "documents" ADD CONSTRAINT "documents_parent_document_id_fkey" FOREIGN KEY ("parent_document_id") REFERENCES "documents"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "chunks" ADD CONSTRAINT "chunks_document_id_fkey" FOREIGN KEY ("document_id") REFERENCES "documents"("id") ON DELETE CASCADE ON UPDATE CASCADE;