PostgreSQL shared_preload_libraries 动态库的加载逻辑分析

PostgreSQL 支持安装扩展(extension),有些扩展的安装,需要在配置文件 postgresql.conf 中提前配置,并在 PG 主程序启动时提前加载,比如 timescaledb,如下:

shared_preload_libraries = 'timescaledb'

这类扩展实际上就是一个 .so 动态库,PG 主程序在启动时,提前将这些动态库加载到进程中。
PG 主进程 postmaster 在启动时,调用 internal_load_library() 函数,进行动态库的加载,函数调用关系如下:

main() ->PostmasterMain() ->process_shared_preload_libraries() ->load_libraries() ->load_file() ->internal_load_library()