• Tom Lane's avatar
    Refactor pg_get_line() to expose an alternative StringInfo-based API. · 8e3c58e6
    Tom Lane authored
    Letting the caller provide a StringInfo to read into is helpful when
    the caller needs to merge lines or otherwise modify the data after
    it's been read.  Notably, now the code added by commit 8f8154a5
    can use pg_get_line_append() instead of having its own copy of that
    logic.  A follow-on commit will also make use of this.
    
    Also, since StringInfo buffers are a minimum of 1KB long, blindly
    using pg_get_line() in a loop can eat a lot more memory than one would
    expect.  I discovered for instance that commit e0f05cd5 caused initdb
    to consume circa 10MB to read postgres.bki, even though that's under
    1MB worth of data.  A less memory-hungry alternative is to re-use the
    same StringInfo for all lines and pg_strdup the results.
    
    Discussion: https://postgr.es/m/1315832.1599345736@sss.pgh.pa.us
    8e3c58e6
string.h 910 Bytes