diff options
author | Michael Paquier <michael@paquier.xyz> | 2019-10-01 12:15:25 +0900 |
---|---|---|
committer | Michael Paquier <michael@paquier.xyz> | 2019-10-01 12:15:25 +0900 |
commit | e788bd924c19e296bd34316e30e3ba1b68354e64 (patch) | |
tree | dc0be40d99dc72eff1dce9ed404b6a48544101e4 /src/backend/utils/init/postinit.c | |
parent | 41a6de41ed697df5d84f3144c6c60b4a9725381f (diff) | |
download | postgresql-e788bd924c19e296bd34316e30e3ba1b68354e64.tar.gz postgresql-e788bd924c19e296bd34316e30e3ba1b68354e64.zip |
Add hooks for session start and session end, take two
These hooks can be used in loadable modules. A simple test module is
included.
The first attempt was done with cd8ce3a but we lacked handling for
NO_INSTALLCHECK in the MSVC scripts (problem solved afterwards by
431f1599) so the buildfarm got angry. This also fixes a couple of
issues noticed upon review compared to the first attempt, so the code
has slightly changed, resulting in a more simple test module.
Author: FabrÃzio de Royes Mello, Yugo Nagata
Reviewed-by: Andrew Dunstan, Michael Paquier, Aleksandr Parfenov
Discussion: https://postgr.es/m/20170720204733.40f2b7eb.nagata@sraoss.co.jp
Discussion: https://postgr.es/m/20190823042602.GB5275@paquier.xyz
Diffstat (limited to 'src/backend/utils/init/postinit.c')
-rw-r--r-- | src/backend/utils/init/postinit.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/backend/utils/init/postinit.c b/src/backend/utils/init/postinit.c index 29c5ec7b58b..151703a4371 100644 --- a/src/backend/utils/init/postinit.c +++ b/src/backend/utils/init/postinit.c @@ -78,6 +78,8 @@ static bool ThereIsAtLeastOneRole(void); static void process_startup_options(Port *port, bool am_superuser); static void process_settings(Oid databaseid, Oid roleid); +/* Hook for plugins to get control at end of session */ +session_end_hook_type session_end_hook = NULL; /*** InitPostgres support ***/ @@ -1195,6 +1197,10 @@ ShutdownPostgres(int code, Datum arg) * them explicitly. */ LockReleaseAll(USER_LOCKMETHOD, true); + + /* Hook at session end */ + if (session_end_hook) + (*session_end_hook) (); } |