From a2a021a0dd0345d91c4a166c7bd1cf709c62cae4 Mon Sep 17 00:00:00 2001 From: yushen Date: Thu, 9 Apr 2026 14:00:03 +0800 Subject: [PATCH] fix(search): make pg_bigm migration graceful when extension unavailable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CI uses pgvector/pgvector:pg17 which doesn't ship pg_bigm. Wrap CREATE EXTENSION and index creation in DO/EXCEPTION blocks so the migration succeeds without pg_bigm — indexes are skipped and search falls back to plain LIKE scans. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../migrations/032_issue_search_index.up.sql | 24 ++++++++++++++----- .../033_comment_search_index.up.sql | 9 ++++++- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/server/migrations/032_issue_search_index.up.sql b/server/migrations/032_issue_search_index.up.sql index bda9d2cfe..9124e40b6 100644 --- a/server/migrations/032_issue_search_index.up.sql +++ b/server/migrations/032_issue_search_index.up.sql @@ -1,8 +1,20 @@ -- Enable pg_bigm extension for bigram-based full-text search (CJK-friendly). -CREATE EXTENSION IF NOT EXISTS pg_bigm; +-- Skips gracefully if pg_bigm is not available (e.g. CI environments). +DO $$ +BEGIN + CREATE EXTENSION IF NOT EXISTS pg_bigm; +EXCEPTION WHEN OTHERS THEN + RAISE NOTICE 'pg_bigm not available, skipping bigram indexes'; +END +$$; --- GIN index on issue title for LIKE '%keyword%' queries. -CREATE INDEX idx_issue_title_bigm ON issue USING gin (title gin_bigm_ops); - --- GIN index on issue description (nullable, use COALESCE). -CREATE INDEX idx_issue_description_bigm ON issue USING gin (COALESCE(description, '') gin_bigm_ops); +-- GIN indexes on issue title/description for LIKE '%keyword%' queries. +-- Only created when pg_bigm is installed. +DO $$ +BEGIN + CREATE INDEX idx_issue_title_bigm ON issue USING gin (title gin_bigm_ops); + CREATE INDEX idx_issue_description_bigm ON issue USING gin (COALESCE(description, '') gin_bigm_ops); +EXCEPTION WHEN OTHERS THEN + RAISE NOTICE 'skipping bigram indexes (pg_bigm not installed)'; +END +$$; diff --git a/server/migrations/033_comment_search_index.up.sql b/server/migrations/033_comment_search_index.up.sql index b552fde38..0ce84b589 100644 --- a/server/migrations/033_comment_search_index.up.sql +++ b/server/migrations/033_comment_search_index.up.sql @@ -1,2 +1,9 @@ -- GIN index on comment content for LIKE '%keyword%' queries (pg_bigm). -CREATE INDEX idx_comment_content_bigm ON comment USING gin (content gin_bigm_ops); +-- Only created when pg_bigm is installed. +DO $$ +BEGIN + CREATE INDEX idx_comment_content_bigm ON comment USING gin (content gin_bigm_ops); +EXCEPTION WHEN OTHERS THEN + RAISE NOTICE 'skipping bigram index on comment (pg_bigm not installed)'; +END +$$;