90 lines
3.4 KiB
SQL
90 lines
3.4 KiB
SQL
-- 全文搜索索引修复验证脚本
|
||
-- 在修复后运行此脚本验证IMMUTABLE函数错误是否已解决
|
||
|
||
-- ===================================================================
|
||
-- 1. 验证IMMUTABLE函数创建成功
|
||
-- ===================================================================
|
||
|
||
SELECT 'Testing IMMUTABLE functions...' as test_phase;
|
||
|
||
-- 测试标题搜索函数
|
||
SELECT 'Title function test: ' || content_title_to_tsvector('AI Technology Development')::text as result;
|
||
|
||
-- 测试内容搜索函数
|
||
SELECT 'Content function test: ' || content_body_to_tsvector('Artificial Intelligence is changing the world')::text as result;
|
||
|
||
-- ===================================================================
|
||
-- 2. 验证索引创建状态
|
||
-- ===================================================================
|
||
|
||
SELECT 'Testing index creation...' as test_phase;
|
||
|
||
-- 检查全文搜索索引是否存在
|
||
SELECT indexname, indexdef
|
||
FROM pg_indexes
|
||
WHERE schemaname = 'public'
|
||
AND indexname IN ('idx_contents_fts_title', 'idx_contents_fts_content');
|
||
|
||
-- ===================================================================
|
||
-- 3. 验证函数属性
|
||
-- ===================================================================
|
||
|
||
SELECT 'Testing function attributes...' as test_phase;
|
||
|
||
-- 检查函数是否标记为IMMUTABLE
|
||
SELECT
|
||
proname as function_name,
|
||
provolatile as volatility,
|
||
CASE provolatile
|
||
WHEN 'i' THEN 'IMMUTABLE ✓'
|
||
WHEN 's' THEN 'STABLE'
|
||
WHEN 'v' THEN 'VOLATILE'
|
||
END as volatility_status
|
||
FROM pg_proc
|
||
WHERE proname IN ('content_title_to_tsvector', 'content_body_to_tsvector');
|
||
|
||
-- ===================================================================
|
||
-- 4. 测试全文搜索功能
|
||
-- ===================================================================
|
||
|
||
SELECT 'Testing full-text search functionality...' as test_phase;
|
||
|
||
-- 如果ak_contents表有数据,测试搜索功能
|
||
DO $$
|
||
BEGIN
|
||
IF EXISTS (SELECT 1 FROM ak_contents LIMIT 1) THEN
|
||
-- 测试标题搜索
|
||
RAISE NOTICE 'Title search test: %',
|
||
(SELECT COUNT(*) FROM ak_contents
|
||
WHERE content_title_to_tsvector(title) @@ to_tsquery('simple', 'test | demo | AI'));
|
||
|
||
-- 测试内容搜索
|
||
RAISE NOTICE 'Content search test: %',
|
||
(SELECT COUNT(*) FROM ak_contents
|
||
WHERE content_body_to_tsvector(content) @@ to_tsquery('simple', 'test | demo | AI'));
|
||
ELSE
|
||
RAISE NOTICE 'No data in ak_contents table to test search functionality';
|
||
END IF;
|
||
END $$;
|
||
|
||
-- ===================================================================
|
||
-- 5. 性能测试 (可选)
|
||
-- ===================================================================
|
||
|
||
SELECT 'Testing query performance...' as test_phase;
|
||
|
||
-- 使用EXPLAIN分析索引使用情况
|
||
-- 注意:如果表中没有数据,这个查询可能不会使用索引
|
||
EXPLAIN (ANALYZE false, BUFFERS false)
|
||
SELECT id, title
|
||
FROM ak_contents
|
||
WHERE content_title_to_tsvector(title) @@ to_tsquery('simple', 'AI');
|
||
|
||
-- ===================================================================
|
||
-- 6. 完成验证
|
||
-- ===================================================================
|
||
|
||
SELECT '✅ IMMUTABLE function fix verification completed!' as status;
|
||
SELECT 'If no errors appeared above, the fix was successful.' as note;
|
||
SELECT 'You can now safely deploy the database structure.' as recommendation;
|