login_hook

login_hook

login_hook : login_hook - hook to execute login_hook.login() at login time

Overview

IDExtensionPackageVersionCategoryLicenseLanguage
7360
login_hook
login_hook
1.7
SEC
GPL-3.0
C
AttributeHas BinaryHas LibraryNeed LoadHas DDLRelocatableTrusted
--s-d--
No
Yes
No
Yes
no
no
Relationships
Schemaslogin_hook
See Also
pg_auth_mon
credcheck
set_user
pg_permissions
passwordcheck_cracklib
pgaudit
auth_delay
passwordcheck

Packages

TypeRepoVersionPG Major CompatibilityPackage PatternDependencies
EXT
MIXED
1.7
18
17
16
15
14
login_hook-
RPM
PGDG
1.7
18
17
16
15
14
login_hook_$v-
DEB
PIGSTY
1.7
18
17
16
15
14
postgresql-$v-login-hook-
Linux / PGPG18PG17PG16PG15PG14
el8.x86_64
PIGSTY 1.7
PGDG 1.7
PGDG 1.7
PGDG 1.7
PGDG 1.7
el8.aarch64
PIGSTY 1.7
PGDG 1.7
PGDG 1.7
PGDG 1.7
PGDG 1.7
el9.x86_64
PIGSTY 1.7
PGDG 1.7
PGDG 1.7
PGDG 1.7
PGDG 1.7
el9.aarch64
PIGSTY 1.7
PGDG 1.7
PGDG 1.7
PGDG 1.7
PGDG 1.7
el10.x86_64
PIGSTY 1.7
PGDG 1.7
PGDG 1.7
PGDG 1.7
PGDG 1.7
el10.aarch64
PIGSTY 1.7
PGDG 1.7
PGDG 1.7
PGDG 1.7
PGDG 1.7
d12.x86_64
PIGSTY 1.7
PIGSTY 1.7
PIGSTY 1.7
PIGSTY 1.7
PIGSTY 1.7
d12.aarch64
PIGSTY 1.7
PIGSTY 1.7
PIGSTY 1.7
PIGSTY 1.7
PIGSTY 1.7
d13.x86_64
PIGSTY 1.7
PIGSTY 1.7
PIGSTY 1.7
PIGSTY 1.7
PIGSTY 1.7
d13.aarch64
PIGSTY 1.7
PIGSTY 1.7
PIGSTY 1.7
PIGSTY 1.7
PIGSTY 1.7
u22.x86_64
PIGSTY 1.7
PIGSTY 1.7
PIGSTY 1.7
PIGSTY 1.7
PIGSTY 1.7
u22.aarch64
PIGSTY 1.7
PIGSTY 1.7
PIGSTY 1.7
PIGSTY 1.7
PIGSTY 1.7
u24.x86_64
PIGSTY 1.7
PIGSTY 1.7
PIGSTY 1.7
PIGSTY 1.7
PIGSTY 1.7
u24.aarch64
PIGSTY 1.7
PIGSTY 1.7
PIGSTY 1.7
PIGSTY 1.7
PIGSTY 1.7
PackageVersionOSORGSIZEFile URL
login_hook_171.7el8.x86_64pgdg18.1 KiBlogin_hook_17-1.7-1PGDG.rhel8.x86_64.rpm
login_hook_171.6el8.x86_64pgdg17.6 KiBlogin_hook_17-1.6-1PGDG.rhel8.x86_64.rpm
login_hook_171.7el8.aarch64pgdg18.1 KiBlogin_hook_17-1.7-1PGDG.rhel8.aarch64.rpm
login_hook_171.6el8.aarch64pgdg17.5 KiBlogin_hook_17-1.6-1PGDG.rhel8.aarch64.rpm
login_hook_171.7el9.x86_64pgdg18.3 KiBlogin_hook_17-1.7-1PGDG.rhel9.x86_64.rpm
login_hook_171.6el9.x86_64pgdg17.8 KiBlogin_hook_17-1.6-1PGDG.rhel9.x86_64.rpm
login_hook_171.7el9.aarch64pgdg18.1 KiBlogin_hook_17-1.7-1PGDG.rhel9.aarch64.rpm
login_hook_171.6el9.aarch64pgdg17.5 KiBlogin_hook_17-1.6-1PGDG.rhel9.aarch64.rpm
login_hook_171.7el10.x86_64pgdg18.6 KiBlogin_hook_17-1.7-1PGDG.rhel10.x86_64.rpm
login_hook_171.7el10.aarch64pgdg18.6 KiBlogin_hook_17-1.7-1PGDG.rhel10.aarch64.rpm
postgresql-17-login-hook1.7d12.x86_64pigsty27.7 KiBpostgresql-17-login-hook_1.7-2PIGSTY~bookworm_amd64.deb
postgresql-17-login-hook1.7d12.aarch64pigsty27.6 KiBpostgresql-17-login-hook_1.7-2PIGSTY~bookworm_arm64.deb
postgresql-17-login-hook1.7d13.x86_64pigsty27.6 KiBpostgresql-17-login-hook_1.7-2PIGSTY~trixie_amd64.deb
postgresql-17-login-hook1.7d13.aarch64pigsty27.6 KiBpostgresql-17-login-hook_1.7-2PIGSTY~trixie_arm64.deb
postgresql-17-login-hook1.7u22.x86_64pigsty29.6 KiBpostgresql-17-login-hook_1.7-2PIGSTY~jammy_amd64.deb
postgresql-17-login-hook1.7u22.aarch64pigsty29.5 KiBpostgresql-17-login-hook_1.7-2PIGSTY~jammy_arm64.deb
postgresql-17-login-hook1.7u24.x86_64pigsty28.8 KiBpostgresql-17-login-hook_1.7-2PIGSTY~noble_amd64.deb
postgresql-17-login-hook1.7u24.aarch64pigsty28.6 KiBpostgresql-17-login-hook_1.7-2PIGSTY~noble_arm64.deb
PackageVersionOSORGSIZEFile URL
login_hook_161.7el8.x86_64pgdg17.9 KiBlogin_hook_16-1.7-1PGDG.rhel8.x86_64.rpm
login_hook_161.6el8.x86_64pgdg17.4 KiBlogin_hook_16-1.6-1PGDG.rhel8.x86_64.rpm
login_hook_161.5el8.x86_64pgdg16.7 KiBlogin_hook_16-1.5-1PGDG.rhel8.x86_64.rpm
login_hook_161.7el8.aarch64pgdg17.9 KiBlogin_hook_16-1.7-1PGDG.rhel8.aarch64.rpm
login_hook_161.6el8.aarch64pgdg17.4 KiBlogin_hook_16-1.6-1PGDG.rhel8.aarch64.rpm
login_hook_161.5el8.aarch64pgdg16.6 KiBlogin_hook_16-1.5-1PGDG.rhel8.aarch64.rpm
login_hook_161.7el9.x86_64pgdg18.1 KiBlogin_hook_16-1.7-1PGDG.rhel9.x86_64.rpm
login_hook_161.6el9.x86_64pgdg17.6 KiBlogin_hook_16-1.6-1PGDG.rhel9.x86_64.rpm
login_hook_161.5el9.x86_64pgdg16.7 KiBlogin_hook_16-1.5-1PGDG.rhel9.x86_64.rpm
login_hook_161.7el9.aarch64pgdg17.9 KiBlogin_hook_16-1.7-1PGDG.rhel9.aarch64.rpm
login_hook_161.6el9.aarch64pgdg17.4 KiBlogin_hook_16-1.6-1PGDG.rhel9.aarch64.rpm
login_hook_161.5el9.aarch64pgdg16.4 KiBlogin_hook_16-1.5-1PGDG.rhel9.aarch64.rpm
login_hook_161.7el10.x86_64pgdg18.5 KiBlogin_hook_16-1.7-1PGDG.rhel10.x86_64.rpm
login_hook_161.7el10.aarch64pgdg18.5 KiBlogin_hook_16-1.7-1PGDG.rhel10.aarch64.rpm
postgresql-16-login-hook1.7d12.x86_64pigsty27.2 KiBpostgresql-16-login-hook_1.7-2PIGSTY~bookworm_amd64.deb
postgresql-16-login-hook1.7d12.aarch64pigsty27.1 KiBpostgresql-16-login-hook_1.7-2PIGSTY~bookworm_arm64.deb
postgresql-16-login-hook1.7d13.x86_64pigsty27.2 KiBpostgresql-16-login-hook_1.7-2PIGSTY~trixie_amd64.deb
postgresql-16-login-hook1.7d13.aarch64pigsty27.2 KiBpostgresql-16-login-hook_1.7-2PIGSTY~trixie_arm64.deb
postgresql-16-login-hook1.7u22.x86_64pigsty29.0 KiBpostgresql-16-login-hook_1.7-2PIGSTY~jammy_amd64.deb
postgresql-16-login-hook1.7u22.aarch64pigsty28.9 KiBpostgresql-16-login-hook_1.7-2PIGSTY~jammy_arm64.deb
postgresql-16-login-hook1.7u24.x86_64pigsty28.2 KiBpostgresql-16-login-hook_1.7-2PIGSTY~noble_amd64.deb
postgresql-16-login-hook1.7u24.aarch64pigsty28.0 KiBpostgresql-16-login-hook_1.7-2PIGSTY~noble_arm64.deb
PackageVersionOSORGSIZEFile URL
login_hook_151.7el8.x86_64pgdg17.9 KiBlogin_hook_15-1.7-1PGDG.rhel8.x86_64.rpm
login_hook_151.6el8.x86_64pgdg17.4 KiBlogin_hook_15-1.6-1PGDG.rhel8.x86_64.rpm
login_hook_151.5el8.x86_64pgdg16.7 KiBlogin_hook_15-1.5-1PGDG.rhel8.x86_64.rpm
login_hook_151.7el8.aarch64pgdg17.9 KiBlogin_hook_15-1.7-1PGDG.rhel8.aarch64.rpm
login_hook_151.6el8.aarch64pgdg17.4 KiBlogin_hook_15-1.6-1PGDG.rhel8.aarch64.rpm
login_hook_151.5el8.aarch64pgdg16.6 KiBlogin_hook_15-1.5-1PGDG.rhel8.aarch64.rpm
login_hook_151.7el9.x86_64pgdg18.1 KiBlogin_hook_15-1.7-1PGDG.rhel9.x86_64.rpm
login_hook_151.6el9.x86_64pgdg17.6 KiBlogin_hook_15-1.6-1PGDG.rhel9.x86_64.rpm
login_hook_151.5el9.x86_64pgdg16.7 KiBlogin_hook_15-1.5-1PGDG.rhel9.x86_64.rpm
login_hook_151.7el9.aarch64pgdg17.9 KiBlogin_hook_15-1.7-1PGDG.rhel9.aarch64.rpm
login_hook_151.6el9.aarch64pgdg17.4 KiBlogin_hook_15-1.6-1PGDG.rhel9.aarch64.rpm
login_hook_151.5el9.aarch64pgdg16.4 KiBlogin_hook_15-1.5-1PGDG.rhel9.aarch64.rpm
login_hook_151.7el10.x86_64pgdg18.5 KiBlogin_hook_15-1.7-1PGDG.rhel10.x86_64.rpm
login_hook_151.7el10.aarch64pgdg18.5 KiBlogin_hook_15-1.7-1PGDG.rhel10.aarch64.rpm
postgresql-15-login-hook1.7d12.x86_64pigsty27.2 KiBpostgresql-15-login-hook_1.7-2PIGSTY~bookworm_amd64.deb
postgresql-15-login-hook1.7d12.aarch64pigsty27.1 KiBpostgresql-15-login-hook_1.7-2PIGSTY~bookworm_arm64.deb
postgresql-15-login-hook1.7d13.x86_64pigsty27.2 KiBpostgresql-15-login-hook_1.7-2PIGSTY~trixie_amd64.deb
postgresql-15-login-hook1.7d13.aarch64pigsty27.1 KiBpostgresql-15-login-hook_1.7-2PIGSTY~trixie_arm64.deb
postgresql-15-login-hook1.7u22.x86_64pigsty29.0 KiBpostgresql-15-login-hook_1.7-2PIGSTY~jammy_amd64.deb
postgresql-15-login-hook1.7u22.aarch64pigsty28.9 KiBpostgresql-15-login-hook_1.7-2PIGSTY~jammy_arm64.deb
postgresql-15-login-hook1.7u24.x86_64pigsty28.2 KiBpostgresql-15-login-hook_1.7-2PIGSTY~noble_amd64.deb
postgresql-15-login-hook1.7u24.aarch64pigsty28.0 KiBpostgresql-15-login-hook_1.7-2PIGSTY~noble_arm64.deb
PackageVersionOSORGSIZEFile URL
login_hook_141.7el8.x86_64pgdg18.0 KiBlogin_hook_14-1.7-1PGDG.rhel8.x86_64.rpm
login_hook_141.6el8.x86_64pgdg17.5 KiBlogin_hook_14-1.6-1PGDG.rhel8.x86_64.rpm
login_hook_141.5el8.x86_64pgdg16.7 KiBlogin_hook_14-1.5-1PGDG.rhel8.x86_64.rpm
login_hook_141.7el8.aarch64pgdg17.9 KiBlogin_hook_14-1.7-1PGDG.rhel8.aarch64.rpm
login_hook_141.6el8.aarch64pgdg17.4 KiBlogin_hook_14-1.6-1PGDG.rhel8.aarch64.rpm
login_hook_141.5el8.aarch64pgdg16.7 KiBlogin_hook_14-1.5-1PGDG.rhel8.aarch64.rpm
login_hook_141.7el9.x86_64pgdg18.2 KiBlogin_hook_14-1.7-1PGDG.rhel9.x86_64.rpm
login_hook_141.6el9.x86_64pgdg17.7 KiBlogin_hook_14-1.6-1PGDG.rhel9.x86_64.rpm
login_hook_141.5el9.x86_64pgdg16.8 KiBlogin_hook_14-1.5-1PGDG.rhel9.x86_64.rpm
login_hook_141.7el9.aarch64pgdg18.0 KiBlogin_hook_14-1.7-1PGDG.rhel9.aarch64.rpm
login_hook_141.6el9.aarch64pgdg17.4 KiBlogin_hook_14-1.6-1PGDG.rhel9.aarch64.rpm
login_hook_141.5el9.aarch64pgdg16.4 KiBlogin_hook_14-1.5-1PGDG.rhel9.aarch64.rpm
login_hook_141.7el10.x86_64pgdg18.5 KiBlogin_hook_14-1.7-1PGDG.rhel10.x86_64.rpm
login_hook_141.7el10.aarch64pgdg18.5 KiBlogin_hook_14-1.7-1PGDG.rhel10.aarch64.rpm
postgresql-14-login-hook1.7d12.x86_64pigsty27.3 KiBpostgresql-14-login-hook_1.7-2PIGSTY~bookworm_amd64.deb
postgresql-14-login-hook1.7d12.aarch64pigsty27.2 KiBpostgresql-14-login-hook_1.7-2PIGSTY~bookworm_arm64.deb
postgresql-14-login-hook1.7d13.x86_64pigsty27.4 KiBpostgresql-14-login-hook_1.7-2PIGSTY~trixie_amd64.deb
postgresql-14-login-hook1.7d13.aarch64pigsty27.2 KiBpostgresql-14-login-hook_1.7-2PIGSTY~trixie_arm64.deb
postgresql-14-login-hook1.7u22.x86_64pigsty29.3 KiBpostgresql-14-login-hook_1.7-2PIGSTY~jammy_amd64.deb
postgresql-14-login-hook1.7u22.aarch64pigsty29.1 KiBpostgresql-14-login-hook_1.7-2PIGSTY~jammy_arm64.deb
postgresql-14-login-hook1.7u24.x86_64pigsty28.4 KiBpostgresql-14-login-hook_1.7-2PIGSTY~noble_amd64.deb
postgresql-14-login-hook1.7u24.aarch64pigsty28.1 KiBpostgresql-14-login-hook_1.7-2PIGSTY~noble_arm64.deb

Source

pig build pkg login_hook;		# build rpm/deb

Install

Make sure PGDG and PIGSTY repo available:

pig repo add pgsql -u   # add both repo and update cache

Install this extension with pig:

pig install login_hook;		# install via package name, for the active PG version

pig install login_hook -v 18;   # install for PG 18
pig install login_hook -v 17;   # install for PG 17
pig install login_hook -v 16;   # install for PG 16
pig install login_hook -v 15;   # install for PG 15
pig install login_hook -v 14;   # install for PG 14

Create this extension with:

CREATE EXTENSION login_hook;

Usage

login_hook: Execute code on user login, comparable to Oracle’s after logon trigger

login_hook allows executing custom PL/pgSQL code whenever a user logs into the database.

CREATE EXTENSION login_hook;

Configuration

Add to postgresql.conf:

session_preload_libraries = 'login_hook'

Creating the Login Function

Define a login_hook.login() function that will execute on every login:

CREATE OR REPLACE FUNCTION login_hook.login() RETURNS VOID LANGUAGE PLPGSQL AS $$
BEGIN
    IF NOT login_hook.is_executing_login_hook() THEN
        RAISE EXCEPTION 'Should only be invoked by login_hook';
    END IF;

    -- Your login logic here:
    RAISE NOTICE 'Hello %', current_user;

EXCEPTION
    WHEN OTHERS THEN
        RAISE LOG 'Error in login_hook.login(): %', SQLERRM;
END
$$;
GRANT EXECUTE ON FUNCTION login_hook.login() TO PUBLIC;

The PUBLIC grant is required because the function runs for every connecting user.

Functions

FunctionReturnsDescription
login_hook.is_executing_login_hook()booleanReturns true only when called during login hook execution
login_hook.get_login_hook_version()textReturns compiled version of login_hook
login_hook.login()voidUser-provided function executed at login

Important Notes

  • The function is NOT invoked for background processes or during recovery mode
  • Handle all exceptions within the function – failures will prevent normal users from logging in
  • Superusers get a warning but can still log in when the function fails
  • For PostgreSQL 17+, consider using the native login event trigger instead
Last updated on