>
> > ISTM that your proposal will actually use more memory because
> > pstate->p_sourcetext does not get free'd, but we must now allocate
> > space for a new "cleaned" query.
>
> I'm not sure that I understand.  Sure we allocate a new temporary buffer
> for
> the cleaned up query string but this will be freed soon.  The query string
> stored in the prepared statement will stay in memory as long as the prepare
> statement exist so this any cleanup can actually save a lot of memory.
>

My point is pstate->p_sourcetext doesn't get freed just because we're not
referencing it from CachedPlanSource in prepared_queries. Instead, with
multi-statement strings, prepared_queries now use a newly allocated string,
new_query, which will be around until DEALLOCATE.

```
+               tmp = palloc(rawstmt->stmt_len + 1);
+               strlcpy(tmp, cleaned, rawstmt->stmt_len + 1);
+
+               new_query = tmp;
```

So this patch always increases memory usage for multi-statement strings;
we have both the original multi-statement string and the cleaned up copy
around.

--
Sami Imseih
Amazon Web Services (AWS)

Reply via email to