From 021bf311c17fc529be28d3c7a204ecee31245a05 Mon Sep 17 00:00:00 2001 From: chenjw28 <792430652@qq.com> Date: Sat, 26 Sep 2026 22:57:54 +0800 Subject: [PATCH] =?UTF-8?q?fix(migrations):=20=E5=88=A0=E6=8E=89=20fingerp?= =?UTF-8?q?rint=20=E7=9A=84=20GIN=20=E7=B4=A2=E5=BC=95=E2=80=94=E2=80=94js?= =?UTF-8?q?on=20=E7=B1=BB=E5=9E=8B=E6=97=A0=20GIN=20=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E7=AC=A6=E7=B1=BB=EF=BC=8C=E5=BB=BA=E8=A1=A8=E5=BF=85=E7=82=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fingerprint 列是 sa.JSON() → PG json 类型,GIN 只支持 jsonb, CREATE INDEX ... USING GIN (fingerprint) 直接报 UndefinedObject。 且代码侧并无 JSON 包含查询(聚合过滤在 Python 侧,DB 走 stp_axis_status 复合索引),索引本身无用。 首次对生产库执行此迁移时因此报错、整个 upgrade 事务回滚 (2026-09-26)。已在本机修复后重新 upgrade head 成功。 未来若需 JSON 检索:先把列迁为 jsonb 再建 GIN。 Co-Authored-By: Claude Code --- .../versions/b7d1f4a92c3e_add_experience_feedback.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/migrations/versions/b7d1f4a92c3e_add_experience_feedback.py b/migrations/versions/b7d1f4a92c3e_add_experience_feedback.py index 927a22a..36c9fd0 100644 --- a/migrations/versions/b7d1f4a92c3e_add_experience_feedback.py +++ b/migrations/versions/b7d1f4a92c3e_add_experience_feedback.py @@ -70,12 +70,12 @@ def upgrade() -> None: ['stp_file_id', 'scheme_axis', 'feedback_status'], unique=False, ) - # GIN 索引(PG only):fingerprint JSON 字段 jsonb_path_query 类查询 - if op.get_bind().dialect.name == 'postgresql': - op.execute( - "CREATE INDEX ix_experience_feedback_fingerprint_gin " - "ON experience_feedback USING GIN (fingerprint)" - ) + # 注意:此处原本计划给 fingerprint 建 GIN 索引("jsonb_path_query 类查询"), + # 但该列是 sa.JSON() → PG 的 json 类型,而 GIN 只支持 jsonb(json 无默认 + # 操作符类,CREATE INDEX 直接报 UndefinedObject)。且代码侧并无 JSON 包含 + # 查询——聚合过滤在 Python 侧进行,DB 侧走上方 (stp_file_id, scheme_axis, + # feedback_status) 复合索引。故不建此索引;未来若真需要 JSON 检索,应先把 + # 列迁为 jsonb 再建 GIN。首次对生产库执行时曾因此报错回滚(2026-09-26)。 def downgrade() -> None: