一个 钩子
提供了一种启用自定义例程的方法,这些例程在 PostgreSQL 操作生命周期的特定点被调用。
各种类型的钩子从 PostgreSQL 8.2 开始就存在于 PostgreSQL 中。但是,文档很少。
可用钩子
- 通用钩子
- 安全钩子
- 函数管理器钩子
- 计划程序钩子
- 执行器钩子
- PL/pgSQL 钩子
更改历史记录
- PostgreSQL 16
ldap_password_hook
已添加 (提交 419a8dd8)
- PostgreSQL 13
openssl_tls_init_hook
已添加 (提交 896fcdb2)
- PostgreSQL 9.6
create_upper_paths_hook
已添加 (提交 5864d6a4)
- PostgreSQL 9.5
row_security_policy_hook_permissive
已添加 (提交 0bf22e0c)row_security_policy_hook_restrictive
已添加 (提交 0bf22e0c)set_join_pathlist_hook
已添加 (提交 e7cb7ee1)set_rel_pathlist_hook
已添加 (提交 c2ea2285)
- PostgreSQL 9.2
emit_log_hook
已添加 (提交 19dbc346)post_parse_analyze_hook
已添加 (提交 a40fa613)
- PostgreSQL 9.1
ClientAuthentication_hook
已添加 (提交 20709f81)ExecutorCheckPerms_hook
已添加 (提交 f4122a8d)ExecutorFinish_hook
已添加 (提交 a874fe7b)fmgr_hook
已添加 (提交 d368e1a2)needs_fmgr_hook
已添加 (提交 d368e1a2)object_access_hook
已添加 (提交 cc1ed40d)
- PostgreSQL 9.0
check_password_hook
已添加 (提交 c742b795)ProcessUtility_hook
已添加 (提交 a5495cd8)
- PostgreSQL 8.4
ExecutorEnd_hook
已添加 (提交 cd35e9d7)ExecutorRun_hook
已添加 (提交 6cc88f0a)ExecutorStart_hook
已添加 (提交 cd35e9d7)get_attavgwidth_hook
已添加 (提交 7b7df9f0)get_index_stats_hook
已添加 (提交 7b7df9f0)get_relation_stats_hook
已添加 (提交 7b7df9f0)shmem_startup_hook
已添加 (提交 dad75a62)
- PostgreSQL 8.3
ExplainOneQuery_hook
已添加 (提交 604ffd28)explain_get_index_name_hook
已添加 (提交 604ffd28)get_relation_info_hook
已添加 (提交 604ffd28)join_search_hook
已添加 (提交 cdf0231c)planner_hook
已添加 (提交 604ffd28)
- PostgreSQL 8.2
建议的钩子
会话开始/结束钩子
以下钩子
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
。