065_add_search_trgm_indexes.sql 1.3 KB

123456789101112131415161718192021222324252627282930313233
  1. -- Improve admin fuzzy-search performance on large datasets.
  2. -- Best effort:
  3. -- 1) try enabling pg_trgm
  4. -- 2) only create trigram indexes when extension is available
  5. DO $$
  6. BEGIN
  7. BEGIN
  8. CREATE EXTENSION IF NOT EXISTS pg_trgm;
  9. EXCEPTION
  10. WHEN OTHERS THEN
  11. RAISE NOTICE 'pg_trgm extension not created: %', SQLERRM;
  12. END;
  13. IF EXISTS (SELECT 1 FROM pg_extension WHERE extname = 'pg_trgm') THEN
  14. EXECUTE 'CREATE INDEX IF NOT EXISTS idx_users_email_trgm
  15. ON users USING gin (email gin_trgm_ops)';
  16. EXECUTE 'CREATE INDEX IF NOT EXISTS idx_users_username_trgm
  17. ON users USING gin (username gin_trgm_ops)';
  18. EXECUTE 'CREATE INDEX IF NOT EXISTS idx_users_notes_trgm
  19. ON users USING gin (notes gin_trgm_ops)';
  20. EXECUTE 'CREATE INDEX IF NOT EXISTS idx_accounts_name_trgm
  21. ON accounts USING gin (name gin_trgm_ops)';
  22. EXECUTE 'CREATE INDEX IF NOT EXISTS idx_api_keys_key_trgm
  23. ON api_keys USING gin ("key" gin_trgm_ops)';
  24. EXECUTE 'CREATE INDEX IF NOT EXISTS idx_api_keys_name_trgm
  25. ON api_keys USING gin (name gin_trgm_ops)';
  26. ELSE
  27. RAISE NOTICE 'skip trigram indexes because pg_trgm is unavailable';
  28. END IF;
  29. END
  30. $$;