钩子

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

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

各种类型的钩子从 PostgreSQL 8.2 开始就存在于 PostgreSQL 中。但是,文档很少。

可用钩子

更改历史记录

建议的钩子

会话开始/结束钩子

以下钩子

  • session_start_hook
  • session_end_hook

是在 PostgreSQL 13 开发周期中通过提交 e788bd92 添加的,但随后在提交 9555cc8d 中撤回了;请参阅主题“添加会话开始和会话结束的钩子,再试一次”。

示例

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

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 内部

反馈

提交对“钩子”的任何评论、建议或更正 此处