Thread

  1. Set notice receiver before libpq connection startup

    Chao Li <li.evan.chao@gmail.com> — 2026-05-20T07:21:08Z

    Hi,
    
    While testing “Log remote NOTICE, WARNING, and similar messages using ereport()”, I noticed that libpqsrv_notice_receiver is only installed after libpqsrv_connect() finishes. As a result, NOTICE messages generated during connection establishment are missed by ereport() and are still printed to stderr.
    
    To reproduce the issue, I created a separate database called remotedb and defined a login trigger that emits a NOTICE message:
    ```
    CREATE DATABASE remotedb;
    
    \c remotedb
    
    CREATE OR REPLACE FUNCTION repro_login_notice()
    RETURNS event_trigger
    LANGUAGE plpgsql AS $$
    BEGIN
      RAISE NOTICE 'startup notice from remotedb login trigger';
    END;
    $$;
    
    CREATE EVENT TRIGGER repro_login_notice_trg
    ON login
    EXECUTE FUNCTION repro_login_notice();
    
    ALTER EVENT TRIGGER repro_login_notice_trg ENABLE ALWAYS;
    ```
    
    Then, from another database:
    ```
    evantest=# create extension dblink;
    CREATE EXTENSION
    evantest=# SELECT dblink_connect('host=127.0.0.1 port=5432 dbname=remotedb user=chaol sslmode=disable gssencmode=disable');
     dblink_connect
    ----------------
     OK
    (1 row)
    ```
    
    In the system log, the NOTICE message is printed directly:
    ```
    2026-05-20 13:02:19.350 CST [24909] STATEMENT:  SELECT dblink_connect('host=127.0.0.1 port=5432 dbname=remotedb user=chaol sslmode=disable gssencmode=disable');
    NOTICE:  startup notice from remotedb login trigger
    ```
    
    To fix that, I think we should install libpqsrv_notice_receiver before libpqsrv_connect_internal(). In the attached patch, I added two helpers: libpqsrv_connect_with_notice_receiver() and libpqsrv_connect_params_with_notice_receiver().
    
    With the fix, the NOTICE message now looks like this:
    ```
    2026-05-20 14:44:49.296 CST [45567] LOG:  received message via remote connection: NOTICE:  startup notice from remotedb login trigger
    2026-05-20 14:44:49.296 CST [45567] STATEMENT:  SELECT dblink_connect('host=127.0.0.1 port=5432 dbname=remotedb user=chaol sslmode=disable gssencmode=disable');
    ```
    
    Please see the attached patch for details.
    
    Best regards,
    --
    Chao Li (Evan)
    HighGo Software Co., Ltd.
    https://www.highgo.com/