diff --git a/server/routers/knowledge_router.py b/server/routers/knowledge_router.py index ae133301..16b52a3e 100644 --- a/server/routers/knowledge_router.py +++ b/server/routers/knowledge_router.py @@ -1130,9 +1130,9 @@ async def upload_file( timestamp = int(time.time() * 1000) minio_filename = f"{basename}_{timestamp}{ext}" - # 生成符合MinIO规范的存储桶名称(将下划线替换为连字符) + # 生成符合MinIO规范的存储桶名称(将下划线替换为连字符,截取长度以满足MinIO的63字符限制) if db_id: - bucket_name = f"ref-{db_id.replace('_', '-')}" + bucket_name = f"ref-{db_id[:32].replace('_', '-')}" else: bucket_name = "default-uploads" diff --git a/src/storage/postgres/manager.py b/src/storage/postgres/manager.py index 021394c9..a4fa9254 100644 --- a/src/storage/postgres/manager.py +++ b/src/storage/postgres/manager.py @@ -142,6 +142,11 @@ class PostgresManager(metaclass=SingletonMeta): "ALTER TABLE IF EXISTS evaluation_result_details ADD COLUMN IF NOT EXISTS generated_answer TEXT", "ALTER TABLE IF EXISTS evaluation_result_details ADD COLUMN IF NOT EXISTS retrieved_chunks JSONB", "ALTER TABLE IF EXISTS evaluation_result_details ADD COLUMN IF NOT EXISTS metrics JSONB", + # 扩展 db_id 字段长度以支持最长 75 字符的 ID(kb_private_ + 64字符hash) + "ALTER TABLE IF EXISTS knowledge_bases ALTER COLUMN db_id TYPE VARCHAR(80)", + "ALTER TABLE IF EXISTS knowledge_files ALTER COLUMN db_id TYPE VARCHAR(80)", + "ALTER TABLE IF EXISTS evaluation_benchmarks ALTER COLUMN db_id TYPE VARCHAR(80)", + "ALTER TABLE IF EXISTS evaluation_results ALTER COLUMN db_id TYPE VARCHAR(80)", "CREATE INDEX IF NOT EXISTS idx_kb_type ON knowledge_bases(kb_type)", "CREATE INDEX IF NOT EXISTS idx_kb_name ON knowledge_bases(name)", "CREATE INDEX IF NOT EXISTS idx_kf_db_id ON knowledge_files(db_id)", diff --git a/src/storage/postgres/models_knowledge.py b/src/storage/postgres/models_knowledge.py index 1fed512a..ffe3679f 100644 --- a/src/storage/postgres/models_knowledge.py +++ b/src/storage/postgres/models_knowledge.py @@ -28,7 +28,7 @@ class KnowledgeBase(Base): __table_args__ = (UniqueConstraint("db_id", name="uq_knowledge_bases_db_id"),) id = Column(Integer, primary_key=True, autoincrement=True) - db_id = Column(String(64), unique=True, nullable=False, index=True) + db_id = Column(String(80), unique=True, nullable=False, index=True) name = Column(String(255), nullable=False, index=True) description = Column(Text) kb_type = Column(String(32), nullable=False, index=True) @@ -51,7 +51,7 @@ class KnowledgeFile(Base): id = Column(Integer, primary_key=True, autoincrement=True) file_id = Column(String(64), unique=True, nullable=False, index=True) - db_id = Column(String(64), ForeignKey("knowledge_bases.db_id", ondelete="CASCADE"), nullable=False, index=True) + db_id = Column(String(80), ForeignKey("knowledge_bases.db_id", ondelete="CASCADE"), nullable=False, index=True) parent_id = Column(String(64), ForeignKey("knowledge_files.file_id", ondelete="SET NULL"), index=True) filename = Column(String(512), nullable=False) original_filename = Column(String(512)) @@ -80,7 +80,7 @@ class EvaluationBenchmark(Base): id = Column(Integer, primary_key=True, autoincrement=True) benchmark_id = Column(String(64), unique=True, nullable=False, index=True) - db_id = Column(String(64), ForeignKey("knowledge_bases.db_id", ondelete="CASCADE"), nullable=False, index=True) + db_id = Column(String(80), ForeignKey("knowledge_bases.db_id", ondelete="CASCADE"), nullable=False, index=True) name = Column(String(255), nullable=False) description = Column(Text) question_count = Column(Integer, default=0) @@ -100,7 +100,7 @@ class EvaluationResult(Base): id = Column(Integer, primary_key=True, autoincrement=True) task_id = Column(String(64), unique=True, nullable=False, index=True) - db_id = Column(String(64), ForeignKey("knowledge_bases.db_id", ondelete="CASCADE"), nullable=False, index=True) + db_id = Column(String(80), ForeignKey("knowledge_bases.db_id", ondelete="CASCADE"), nullable=False, index=True) benchmark_id = Column( String(64), ForeignKey("evaluation_benchmarks.benchmark_id", ondelete="SET NULL"),