66. Custom WAL Resource Managers
This chapter explains the interface between the core PostgreSQL system and custom WAL resource managers, which enable extensions to integrate directly with the WAL.
An extension, especially a Table Access Method or Index Access Method, may need to use WAL for recovery, replication, and/or Logical Decoding. Custom resource managers are a more flexible alternative to Generic WAL (which does not support logical decoding), but more complex for an extension to implement.
To create a new custom WAL resource manager, first define an RmgrData
structure with implementations for the resource manager methods. Refer to src/backend/access/transam/README
and src/include/access/xlog_internal.h
in the PostgreSQL source.
Then, register your new resource manager.
RegisterCustomRmgr
must be called from the extension module's _PG_init function. While developing a new extension, use RM_EXPERIMENTAL_ID
for rmid
. When you are ready to release the extension to users, reserve a new resource manager ID at the Custom WAL Resource Manager page.
Place the extension module implementing the custom resource manager in shared_preload_libraries so that it will be loaded early during PostgreSQL startup.
Note
The extension must remain in shared_preload_libraries as long as any custom WAL records may exist in the system. Otherwise PostgreSQL will not be able to apply or decode the custom WAL records, which may prevent the server from starting.