↑↓ select ↵ open ⌫ change scope Open full search

PG.CENTER connects PostgreSQL documentation, reference, and ecosystem knowledge. Maintained by Pigsty.

Documentation / Extension Hooks / Permissions and object access

object_access_hook

object_access_hook

Plugin provides a hook function matching one or both of these signatures.

Reading PostgreSQL 18.

Description

Plugin provides a hook function matching one or both of these signatures.

Interface type
object_access_hook_type
Header
src/include/catalog/objectaccess.h
Subsystem
Permissions and object access
Initial value
NULL (no hook installed)

C interface

typedef void (*object_access_hook_type) (ObjectAccessType access, Oid classId, Oid objectId, int subId, void *arg);
extern PGDLLIMPORT object_access_hook_type object_access_hook;

Core source comments

Hook on object accesses. This is intended as infrastructure for security and logging plugins.

Call sites

src/backend/catalog/objectaccess.c:43

src/backend/catalog/objectaccess.c:65

src/backend/catalog/objectaccess.c:81

src/backend/catalog/objectaccess.c:104

src/backend/catalog/objectaccess.c:126

src/backend/catalog/objectaccess.c:144

Core call context: src/backend/catalog/objectaccess.c:37–51

	/* caller should check, but just in case... */
	Assert(object_access_hook != NULL);

	memset(&pc_arg, 0, sizeof(ObjectAccessPostCreate));
	pc_arg.is_internal = is_internal;

	(*object_access_hook) (OAT_POST_CREATE,
						   classId, objectId, subId,
						   &pc_arg);
}

/*
 * RunObjectDropHook
 *
 * OAT_DROP object ID based event hook entrypoint

Core call context: src/backend/catalog/objectaccess.c:59–73

	/* caller should check, but just in case... */
	Assert(object_access_hook != NULL);

	memset(&drop_arg, 0, sizeof(ObjectAccessDrop));
	drop_arg.dropflags = dropflags;

	(*object_access_hook) (OAT_DROP,
						   classId, objectId, subId,
						   &drop_arg);
}

/*
 * RunObjectTruncateHook
 *
 * OAT_TRUNCATE object ID based event hook entrypoint

Core call context: src/backend/catalog/objectaccess.c:75–89

void
RunObjectTruncateHook(Oid objectId)
{
	/* caller should check, but just in case... */
	Assert(object_access_hook != NULL);

	(*object_access_hook) (OAT_TRUNCATE,
						   RelationRelationId, objectId, 0,
						   NULL);
}

/*
 * RunObjectPostAlterHook
 *
 * OAT_POST_ALTER object ID based event hook entrypoint

Documentation and source

Source build
Version
18
Build
REL_18_STABLE
Source fingerprint
753057e340da8f22e57c9a409ea7a235fd6a46bd

Related entries

Back to Extension Hooks · Recorded in PostgreSQL 10 through 20; the first sample is not necessarily its introduction.