perf(db): 标题模糊匹配改用 % 运算符走 trigram 索引,巡检回填加部分索引,删除无用索引

- 别名 / 资源标题模糊匹配原来写 similarity(x, q) >= t,函数调用用不上 trigram 索引;改为
  x % q and similarity(x, q) >= t(% 缺省阈值 0.3 不高于各处阈值,结果相同)。source_release 标题搜索
  在部署规模(8440 行)从约 75 ms 降到 0.7 ms
- 调度器每 15 秒的巡检回填原来整扫 scheduled_job_run:迁移 0089 加部分索引 scheduled_job_run_harvest_idx
- 迁移 0089 删除没有任何查询会用到的 content_unit_air_date_idx;镜像带 pg_stat_statements 时建扩展,
  没有或权限不够时跳过,不让迁移失败
- gen:types 跳过扩展自带的视图(public.pg_stat_statements)

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Cxwgnn2pbzQ7rXv3rq7fei
This commit is contained in:
rootandClaude Opus 5.5 committed 2026-10-06 20:24:07 +08:00
1 parent 155f30417c
commit 9fffee16c8
9 files changed
+69 -8

No files matched your search

+4
View File
@@ -51,6 +51,10 @@ export async function generateTypesSource(db: Kysely<any>): Promise<string> {
select table_name, column_name, data_type, udt_name, is_nullable, column_default
from information_schema.columns
where table_schema = current_schema() and table_name not like 'kysely_%'
-- 扩展自带的视图(如 public.pg_stat_statements,迁移 0089)不属于应用表
and not exists (select 1 from pg_depend d join pg_class r on r.oid = d.objid
where d.classid = 'pg_class'::regclass and d.deptype = 'e'
and r.relname = table_name and r.relnamespace = current_schema()::regnamespace)
order by table_name, ordinal_position`.execute(db);
const checks = await sql<{ table_name: string; def: string }>`
select c.relname as table_name, pg_get_constraintdef(k.oid) as def