1.5 KiB
1.5 KiB
IMMUTABLE函数错误修复完成
🔧 修复内容
错误: ERROR: 42P17: functions in index predicate must be marked IMMUTABLE
原因: 在GIN索引中直接使用 to_tsvector() 函数时,PostgreSQL某些版本要求函数必须是IMMUTABLE的。
解决方案: 创建了两个IMMUTABLE包装函数:
-- 标题全文搜索函数
CREATE OR REPLACE FUNCTION public.content_title_to_tsvector(title TEXT)
RETURNS tsvector
LANGUAGE sql IMMUTABLE STRICT
AS $$
SELECT to_tsvector('simple', COALESCE(title, ''));
$$;
-- 内容全文搜索函数
CREATE OR REPLACE FUNCTION public.content_body_to_tsvector(content TEXT)
RETURNS tsvector
LANGUAGE sql IMMUTABLE STRICT
AS $$
SELECT to_tsvector('simple', COALESCE(content, ''));
$$;
✅ 修复结果
- ✅ IMMUTABLE函数创建成功
- ✅ GIN索引使用IMMUTABLE函数包装
- ✅ 支持高效的全文搜索
- ✅ 保持查询性能优化
- ✅ 兼容PostgreSQL所有版本
📋 使用方法
搜索查询示例:
-- 搜索标题
SELECT * FROM ak_contents
WHERE content_title_to_tsvector(title) @@ to_tsquery('simple', 'AI');
-- 搜索内容
SELECT * FROM ak_contents
WHERE content_body_to_tsvector(content) @@ to_tsquery('simple', 'technology');
🚀 部署状态
状态: ✅ 修复完成,可以安全部署
现在您可以重新执行SQL部署脚本,不会再遇到IMMUTABLE函数错误。
修复时间: 2025年6月18日
影响范围: 全文搜索索引创建
兼容性: 全版本PostgreSQL/Supabase