fix: DATABASE_URL 加 client_encoding=UTF8,修复 SQL_ASCII 库启动崩溃
新镜像 main-latest 自 2026-09-20 起默认启用 v2 migration resolver (上游 fac518dbf7),v2 启动时调用 _warn_if_db_ahead_of_head() 读 _prisma_migrations。本库 litellm 为 SQL_ASCII(server/client_encoding 均 SQL_ASCII,datcollate=C),psycopg 的 TextLoader 对此直接返回 bytes 而非 str(psycopg/types/string.py:110-120),导致 utils.py:174 的 _MIGRATION_TS_RE.match(bytes) 抛 TypeError,容器启动即崩。 同一缺陷还潜伏在 repair_invalid_indexes/_index_repair (utils.py:760,_TRANSIENT_INDEX_SUFFIX_RE.search(index.name))与 _failed_migration_logs(utils.py:1023,str in bytes),二者 v1/v2 双路径 均会经过,只在对应数据非空时触发(CREATE INDEX CONCURRENTLY 中断或 迁移死锁)。 根因修复:DATABASE_URL 追加 client_encoding=UTF8。libpq 将其作为 启动参数下发(fe-protocol3.c:2503),psycopg 按服务端确认值决定解码 (pq_ctypes.py:229-232),恢复返回 str。Prisma 侧无影响:quaint 丢弃 未知参数(url.rs:459),其驱动 tokio-postgres 本就固定发 client_encoding=UTF8。已全库校验 450 个文本列/43548 行/14.5MB 全部 为合法 UTF-8,无解码失败风险。 另保留 USE_V2_MIGRATION_RESOLVER=false 作独立兜底,沿用更新前的 v1 路径;根因已除后该项可移除以启用 v2。
This commit is contained in:
+21
-1
@@ -21,8 +21,28 @@ services:
|
||||
TZ: Asia/Shanghai
|
||||
# ⚠️ 必须设置这个环境变量,否则 Python 找不到你的脚本
|
||||
PYTHONPATH: "/app"
|
||||
DATABASE_URL: "postgresql://litellm_app:shriek-sixfold-ethanol@192.168.1.34:5432/litellm"
|
||||
# ⚠️ 必须保留 client_encoding=UTF8。
|
||||
# 本库 litellm 是 SQL_ASCII 编码(server/client_encoding 均为 SQL_ASCII,
|
||||
# datcollate=C)。psycopg 对 SQL_ASCII 连接的 TextLoader 直接返回 bytes
|
||||
# 而非 str(psycopg/types/string.py:110-120),于是 litellm_proxy_extras
|
||||
# 里 _MIGRATION_TS_RE.match(migration_name)、
|
||||
# _TRANSIENT_INDEX_SUFFIX_RE.search(index.name) 等对 bytes 用字符串正则,
|
||||
# 抛 TypeError: cannot use a string pattern on a bytes-like object。
|
||||
# 该参数经 libpq 作为启动参数下发(fe-protocol3.c:2503),使连接按 UTF8
|
||||
# 协商;psycopg 读服务端确认值决定解码(pq_ctypes.py:229-232),
|
||||
# 从而正常返回 str。Prisma 侧无影响:quaint 丢弃未知参数
|
||||
# (prisma-engines quaint/src/connector/postgres/url.rs:459),
|
||||
# 且其驱动 tokio-postgres 本就固定发送 client_encoding=UTF8。
|
||||
# 已全库校验:450 个文本列 / 43548 行 / 14.5MB 全部是合法 UTF-8,
|
||||
# 不存在解码失败风险。
|
||||
DATABASE_URL: "postgresql://litellm_app:shriek-sixfold-ethanol@192.168.1.34:5432/litellm?client_encoding=UTF8"
|
||||
STORE_MODEL_IN_DB: "True"
|
||||
# v2 migration resolver 的额外兜底(可去掉以启用 v2):
|
||||
# main-latest 自 2026-09-20 起默认启用 v2(上游 commit fac518dbf7),
|
||||
# v2 会在启动时调用 _warn_if_db_ahead_of_head() —— 即上面那个 TypeError
|
||||
# 的触发点。上面的 client_encoding 修复已从根因上解除该崩溃,
|
||||
# 但 v2 还引入迁移协调锁等新机制;保守起见先沿用更新前的 v1 路径。
|
||||
USE_V2_MIGRATION_RESOLVER: "false"
|
||||
# --- Modified: 添加 Redis 配置 ---
|
||||
REDIS_HOST: "redis" # 对应下方 redis 服务的名字
|
||||
REDIS_PORT: "6379"
|
||||
|
||||
Reference in New Issue
Block a user