shmem_request_hook 是一个用于加载到内存中的扩展请求额外共享内存的钩子。
shmem_request_hook 在 PostgreSQL 15 中添加。
变更历史
- PostgreSQL 15
- 添加(提交 4f2400cb)
示例
shmem_request_hook 的用法示例
/*
* Module load callback
*/
void
_PG_init(void)
{
if (!process_shared_preload_libraries_in_progress)
return;
/*
* Install hooks.
*/
#if (PG_VERSION_NUM >= 150000)
prev_shmem_request_hook = shmem_request_hook;
shmem_request_hook = extension_shmem_request;
#endif
prev_shmem_startup_hook = shmem_startup_hook;
shmem_startup_hook = extension_shmem_startup;
/* ... */
}
#if (PG_VERSION_NUM >= 150000)
/*
* shmem_requst_hook: request shared memory
*/
static void
extension_shmem_request(void)
{
if (prev_shmem_request_hook)
prev_shmem_request_hook();
RequestAddinShmemSpace(MAXALIGN(sizeof(extensionSharedState)));
RequestNamedLWLockTranche(TRANCHE_NAME, 1);
}
#endif
参考资料
- PostgreSQL 文档: 共享内存和 LWLocks
有用链接
- PostgreSQL 15:_PG_init() 和 shmem_request_hook - Ian Barwick 于 2022 年 5 月发表的博客文章
