快速结论:这个报错通常出现在自托管 Langfuse 升级/更换 PostgreSQL(例如更新 bitnamilegacy/postgresql)之后,Prisma 检测到历史迁移 20231119171939_cron_add_job_started_at 处于失败状态(P3009),导致后续所有迁移(包括创建 prices 表的那个)都不再执行。优先排查该失败迁移的根因(常见是表属主/权限问题),再用 Prisma CLI 处理这条失败迁移并重新部署。
适用环境:Issue 已确认的环境为自托管 Langfuse(self-hosting),数据库由 bitnamilegacy/postgresql 更新而来;仓库标签为 bug、self-hosting。Issue 未提供具体的 Python、CUDA、显卡或 Langfuse 版本号,这些项需结合自身部署另行确认。
最快修复方案:Issue 讨论中给出的处理路径是:先确认并修复 20231119171939_cron_add_job_started_at 迁移失败的根因(例如表属主变化,可用 \dt public.* 查看属主,必要时 ALTER TABLE table_name OWNER TO new_user;),然后用 npx prisma migrate resolve --applied 20231119171939_cron_add_job_started_at 或 --rolled-back 标记该迁移状态,最后重新执行 npx prisma migrate deploy。该方案来自 Issue 中的助手回复,属于“可优先尝试”,并非官方人员已验证的一步修复。
注意事项:--applied 与 --rolled-back 的选择取决于该迁移是否已经部分生效,选错可能导致 schema 与实际数据库不一致;执行前建议先备份数据库。Issue 中 UUID/二进制格式错误(22P03、invalid character)被推测为迁移不完整或数据损坏所致,是否能在迁移修复后自动消失尚未验证。
问题场景
用户在自托管 Langfuse 中,将数据库从 bitnamilegacy/postgresql 更新之后启动服务。Langfuse web 日志显示 Prisma 迁移被阻断,worker 日志同时出现多张表/查询相关的错误,包括找不到 prices 表、默认模型价格写入失败、dashboard 与 evalTemplate 查询报错等。整个问题的核心是迁移链被一条失败迁移卡住,而不是单纯某个查询写错。
报错原文
#Error: P3009
migrate found failed migrations in the target database, new migrations will not be applied. Read more about how to resolve migration issues in a production database: https://pris.ly/d/migrate-resolve
The `20231119171939_cron_add_job_started_at` migration started at 2025-10-06 13:28:28.036109 UTC failed
Raw query failed. Code: `42P01`. Message: `relation "prices" does not exist`
Error upserting default model prices after 583ms:
Invalid `prisma.$queryRaw()` invocation:
Raw query failed. Code: `42P01`. Message: `relation "prices" does not exist`
prisma:error
Invalid `prisma.dashboardWidget.findMany()` invocation:
Error occurred during query execution:
ConnectorError(ConnectorError { user_facing_error: None, kind: QueryError(PostgresError { code: "22P03", message: "incorrect binary data format in bind parameter 1", severity: "ERROR", detail: None, column: None, hint: None }), transient: false })
Error upserting Langfuse dashboards after 590ms:
Invalid `prisma.evalTemplate.findMany()` invocation:
Inconsistent column data: Error creating UUID, invalid character: expected an optional prefix of `urn:uuid:` followed by [0-9a-fA-F-], found `m` at 2
Error upserting managed evaluators after 593ms:
原因分析
最可能的原因是:迁移 20231119171939_cron_add_job_started_at 执行失败并被 Prisma 记为 failed,触发 P3009。Prisma 在存在 failed migration 时会停止应用任何新迁移,因此创建 prices 表等后续迁移都没有执行,worker 侧才会报 relation "prices" does not exist。至于该迁移为何失败,Issue 讨论中提到常见因素是权限、列冲突或表属主问题——尤其在更换数据库用户或升级 PostgreSQL 之后,属主变化很常见。其余 UUID/binary 相关错误(22P03、invalid character)被推测是部分迁移未完成或数据异常造成的连带现象。
环境排查
- 确认 Langfuse 为自托管部署,并记录当前使用的镜像/版本。
- 确认 PostgreSQL 来源与升级路径(本例为 bitnamilegacy/postgresql)。
- 确认当前数据库连接使用的用户名/角色,以及是否在升级后发生过用户变更。
- 检查 public schema 下相关表的属主,可用
\dt public.*查看。 - Issue 未提供 Python、CUDA、PyTorch、显卡、节点版本等信息,无需据此排查。
解决步骤
- 先定位
20231119171939_cron_add_job_started_at迁移失败的根因,检查权限、列冲突或表属主问题。若为属主问题,可用\dt public.*查看属主,再用ALTER TABLE table_name OWNER TO new_user;修正。 - 根因处理完成后,用 Prisma CLI 标记该失败迁移的状态,二选一:
npx prisma migrate resolve --applied 20231119171939_cron_add_job_started_at
或npx prisma migrate resolve --rolled-back 20231119171939_cron_add_job_started_at - 重新部署迁移:
npx prisma migrate deploy,让包括创建prices表在内的后续迁移得到执行。 - 若仍有 UUID 或二进制格式错误,先确认 schema 已正确迁移,再检查受影响表中是否存在异常数据。
验证方法
重新执行迁移后,确认 npx prisma migrate deploy 不再报 P3009,且创建 prices 表的迁移已成功应用(可通过查询该表是否存在验证)。随后重启 Langfuse web 与 worker,观察日志中 relation "prices" does not exist、22P03 及 UUID 相关报错是否消失。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


