42 lines
1.5 KiB
Go
42 lines
1.5 KiB
Go
package routes
|
|
|
|
import (
|
|
"database/sql"
|
|
"log"
|
|
"strings"
|
|
)
|
|
|
|
// EnsureTranslationPerfIndexes creates helpful indexes for translation listing/search.
|
|
// It is safe to run on each startup; failures are logged and do not stop the service.
|
|
func EnsureTranslationPerfIndexes(db *sql.DB) {
|
|
if db == nil {
|
|
return
|
|
}
|
|
|
|
statements := []string{
|
|
`CREATE EXTENSION IF NOT EXISTS pg_trgm`,
|
|
`CREATE INDEX IF NOT EXISTS idx_mk_translator_t_key_lang ON mk_translator (t_key, lang_code)`,
|
|
`CREATE INDEX IF NOT EXISTS idx_mk_translator_status_lang_updated ON mk_translator (status, lang_code, updated_at DESC)`,
|
|
`CREATE INDEX IF NOT EXISTS idx_mk_translator_manual_status ON mk_translator (is_manual, status)`,
|
|
`CREATE INDEX IF NOT EXISTS idx_mk_translator_source_type_expr ON mk_translator ((COALESCE(NULLIF(provider_meta->>'source_type',''),'dummy')))`,
|
|
`CREATE INDEX IF NOT EXISTS idx_mk_translator_source_text_trgm ON mk_translator USING gin (source_text_tr gin_trgm_ops)`,
|
|
`CREATE INDEX IF NOT EXISTS idx_mk_translator_translated_text_trgm ON mk_translator USING gin (translated_text gin_trgm_ops)`,
|
|
}
|
|
|
|
for _, stmt := range statements {
|
|
if _, err := db.Exec(stmt); err != nil {
|
|
log.Printf("[TranslationPerf] index_setup_warn sql=%q err=%v", summarizeSQL(stmt), err)
|
|
continue
|
|
}
|
|
log.Printf("[TranslationPerf] index_ready sql=%q", summarizeSQL(stmt))
|
|
}
|
|
}
|
|
|
|
func summarizeSQL(sqlText string) string {
|
|
s := strings.TrimSpace(sqlText)
|
|
if len(s) <= 100 {
|
|
return s
|
|
}
|
|
return s[:100] + "..."
|
|
}
|