From b5c14a6a6fbffc89d4cf04429bebdf1a4fc992fd Mon Sep 17 00:00:00 2001 From: Wenjie Zhang Date: Mon, 26 Jan 2026 11:13:33 +0800 Subject: [PATCH] =?UTF-8?q?fix(database):=20=E6=89=A9=E5=B1=95=20db=5Fid?= =?UTF-8?q?=20=E5=AD=97=E6=AE=B5=E9=95=BF=E5=BA=A6=E8=87=B3=2080=20?= =?UTF-8?q?=E5=AD=97=E7=AC=A6=EF=BC=8C=E4=BB=A5=E6=94=AF=E6=8C=81=E6=9B=B4?= =?UTF-8?q?=E9=95=BF=E7=9A=84=20ID=20=20#499?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/routers/knowledge_router.py | 4 ++-- src/storage/postgres/manager.py | 5 +++++ src/storage/postgres/models_knowledge.py | 8 ++++---- 3 files changed, 11 insertions(+), 6 deletions(-) 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"),