![[assets/str_idx_hash.png|256]]
- **Description**: Implements a disk-based hash table using **Linear Hashing**. It maps values to 32-bit hash codes and stores them in buckets.
- **Data Structure**:
- **Meta Page**: Stores the hash seed, current split point, and number of buckets.
- **Bucket Pages**: Contain the actual TIDs and original hash codes.
- **Overflow Pages**: If a bucket exceeds one page, an overflow chain is created.
- **Linear Hashing**: The number of buckets grows dynamically. When the "fill factor" is exceeded, a single bucket (the split point) is divided into two, even if it's not the bucket that specifically overflowed.
- **Supported Operators**: `=`.
- **Special Features**:
- **PG 10+ Crash Safety**: Since Postgres 10, Hash indexes are fully WAL-logged, making them safe for production use.
- **Metaphor**: A massive wall of identical mailboxes. The **Meta Page** is the master key that tells you which section of the wall to look at. If one mailbox gets too full, the postman (Linear Hashing) simply adds a new row to the bottom of the wall.