钩子

一种在源代码级别扩展功能的方式

一个钩子提供了一种启用自定义例程的方式,这些例程在PostgreSQL运行生命周期的特定点被调用。

各种钩子自PostgreSQL 8.2以来就一直存在于PostgreSQL中。然而,文档很少。

可用钩子

变更历史

提议的钩子

会话开始/结束钩子

以下钩子

  • session_start_hook
  • session_end_hook

PostgreSQL 13开发周期中,提交 e788bd92 添加了这些钩子,但随后在提交 9555cc8d 中撤销;请参阅主题“Add hooks for session start and session end, take two”。

示例

扩展中的共享内存启动钩子

static shmem_startup_hook_type prev_shmem_startup_hook = NULL;
static void our_shmem_startup(void);

void
_PG_init(void)
{
	prev_shmem_startup_hook = shmem_startup_hook;
	shmem_startup_hook = our_shmem_startup;
}

/*
 * shmem_startup hook: allocate or attach to shared memory,
 */
static void
our_shmem_startup(void)
{
	bool		found;

	if (prev_shmem_startup_hook)
		prev_shmem_startup_hook();

	/*
	 * Create or attach to the shared memory state, including hash table
	 */
	LWLockAcquire(AddinShmemInitLock, LW_EXCLUSIVE);

 	/* do stuff... */

	LWLockRelease(AddinShmemInitLock);
}

PostgreSQL 15开始,除了shmem_startup_hook之外,可能还需要shmem_request_hook

分类

应用程序接口钩子PostgreSQL概念PostgreSQL内部

反馈

请在此处提交关于“Hook”的任何评论、建议或更正