We have a question regarding prepared statements. The following code is located 
in src/backend/tcop/postgres.c:
    /* Get the parameter format codes */
    numPFormats = pq_getmsgint(input_message, 2);
    if (numPFormats > 0)
        int i;
        pformats = (int16 *) palloc(numPFormats * sizeof(int16));
        for (i = 0; i < numPFormats; i++)
            pformats[i] = pq_getmsgint(input_message, 2);

There is similar code for Parameter Lists (ParamListInfo) and Result Format 
Codes (rformats). Unless we're missing something, a prepared statement would 
probably never change once prepared. 
Would there be any issue or benefit moving the allocation of these buffers to 
the PreparedStatement structure so they stay with the prepared statement 
throughout its life? There is probably the question of named versus unnamed 
prepared statements, but is there anything else that we might be missing?
Along these lines, would it also be possible to keep an Executor State and 
Expression Context with the statement and just reset key parts of them, rather 
than rebuilding them from scratch each time a prepared statement is executed?

---------------------------(end of broadcast)---------------------------
TIP 2: Don't 'kill -9' the postmaster

Reply via email to