On Fri, 29 May 2026 at 19:07, Jacob Champion <[email protected]> wrote: > - let drivers pin protocol-level prepared statements so that > application-level DISCARD doesn't touch them > - explicitly separate client and middleware contexts or streams from each > other > - rebuild discarded prepared statements opportunistically on a failure
I think I like option 2 best (and after that 1). I'm often annoyed that our application layer and protocol layer is so intertwined, so any attempt to separate them is a welcome addition in my opinion. One approach would be to: 1. add an optional additional text field to the Parse message as a kind of "namespace" for prepared statements. Leaving this field out or set to the empty string, would create an "application-level" prepared statement. Setting it to anything else would create a protocol-level prepared statement within that namespace. This would allow libpq to create its own prepared statements, without conflicting with protocol-level statements created by client libraries like psycopopg. 2. Application-level DISCARD/DEALLOCATE would not clean up these namespaced protocol level prepared statements 3. Add a protocol-level version of DEALLOCATE ALL and DISCARD ALL which also clean up all the protocol-level prepared statements 4. Add a protocol-level message to deallocate all prepared statements in a certain schema.
