Hash-индекс в PostgreSQL поддерживает только операцию = (равенство). B-tree поддерживает =, <, >, BETWEEN, IN, ORDER BY, LIKE "prefix%". Hash может быть чуть быстрее для точного совпадения на очень больших таблицах, но на практике B-tree почти всегда предпочтительнее из-за универсальности и того, что B-tree уже хорошо оптимизирован.