Thread

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Give SMgrRelation pointers a well-defined lifetime.

  1. BUG #19021: Memory leak of SMgrRelation object during standby redo

    PG Bug reporting form <noreply@postgresql.org> — 2025-08-17T16:41:23Z

    The following bug has been logged on the website:
    
    Bug reference:      19021
    Logged by:          Jingtang Zhang
    Email address:      mrdrivingduck@gmail.com
    PostgreSQL version: 17.6
    Operating system:   Linux
    Description:        
    
    Hi~ hackers
    
    Back to v17, commit 21d9c3ee gave SMgrRelation a well-defined lifetime, and
    smgrclose nolonger removes SMgrRelation object from the hashtable, leaving
    the work to smgrdestroyall. But I find a place that relies on the removing
    behavior previously, but is still calling smgrclose.
    
    Startup process of standby will redo table dropping with DropRelationFiles,
    using smgrdounlinkall to drop buffers and unlink physical files, and then
    uses smgrclose to destroy the SMgrRelation object. I think it should use
    smgrdestroy here, or the object memory will be leaked.
    
    With concurrent clients, the following pgbench script will produce the
    memory leak of a standby startup process easily. Entries will be entered
    into the hashtable but never removed.
    
    pgbench -f bench.sql -n -c 32 -j 32 -T 600
    
    ```sql
    DROP TABLE IF EXISTS tbl:client_id;
    CREATE TABLE tbl:client_id (id int);
    ```
    
    The attached patch export smgrdestroy as a public function, and use it in
    DropRelationFiles:
    
    (Sorry I have sent an e-mail to pgsql-development, with a patch)
    https://www.postgresql.org/message-id/flat/28C687D4-F335-417E-B06C-6612A0BD5A10%40gmail.com
    
    I think it affects v17, v18 and master.