hash_create 创建 hash表entry第一个成员必须是key类型
void
InitBufTable(int size)
{
HASHCTL info;
/* assume no locking is needed yet */
/* BufferTag maps to Buffer */
info.keysize = sizeof(BufferTag);
info.entrysize = sizeof(BufferLookupEnt);
info.num_partitions = NUM_BUFFER_PARTITIONS;
SharedBufHash = ShmemInitHash("Shared Buffer Lookup Table", size, size, &info, HASH_ELEM | HASH_BLOBS | HASH_PARTITION);
}
操作
hash_search HASH_ENTER 插入
/* hash_search operations */
typedef enum
{
HASH_FIND, look up key in table
HASH_ENTER, look up key in table, creating entry if not present
HASH_REMOVE, look up key in table, remove entry if present
HASH_ENTER_NULL same, but return NULL if out of memory
} HASHACTION;
hash_seq_init 遍历哈希表初始化
hash_seq_search 遍历哈希表
hash_destroy 销毁
共享内存HASH表 (因为共享内存需要提前分配固定内存,所以该hash表有最大存储个数限制)
ShmemInitHash HASH_SHARED_MEM