Thread

  1. Re: Clarification on when _PG_init() is invoked for extensions

    Hannu Krosing <hannuk@google.com> — 2025-11-20T21:33:00Z

    You probably can do the LOAD in the GUC callback functions and then set
    that GUC only for specific databases using ALTER DATABASE SET
    <my-extension-loading-guc>=true;
    
    On Thu, Nov 20, 2025 at 6:53 PM Ayush Vatsa <ayushvatsa1810@gmail.com>
    wrote:
    
    > Hi,
    >
    > CREATE extension does not automatically load or ensure that _PG_init() is
    >> run.
    >> It mainly runs the .sql script in your extension.
    >>
    > Thanks for the clarification. However, in my testing, _PG_init() did run
    > when I executed
    > CREATE EXTENSION. I suspect this might be happening because the SQL
    > script defines
    > C functions using MODULE_PATHNAME, which triggers the library load.
    > In a new session, _PG_init() seems to run again when any of those C
    > functions are executed.
    >
    > *My use case:*
    > My use case is that I’m building an experimental extension that will be
    > installed only in a few
    > databases. I want the hooks initialized by this extension to apply only to
    > those specific
    > databases, while all other databases should continue with the default
    > PostgreSQL behavior.
    >
    > Thank you,
    > Ayush
    >
    >>