No, it can be anything else.

Please correctly me if I'm wrong, but to me, PgPool-II looks like a proxy
server that forwards all the data without interpretation. Can I intercept
in the middle and control the flow between client and server? For e.g, I
need control when the result of transaction is sent back to the result?

On Sat, Aug 20, 2016 at 2:39 AM, Craig Ringer <> wrote:

> On 19 August 2016 at 22:16, Joshua Bay <> wrote:
>> Oh I see.
>> I just read more on use cases PgBouncer, but seems like it can't be used
>> for my project.
>> The reason is that I need to have my middleware to have full control over
>> each transaction.
>> That is it must be able to decide if it's going to commit or abort a
>> single query (reason why libpq is used in the middleware), and it must be
>> able to decide when to send back the result. Also it does things like load
>> balancing with it's algorithm.
>> So, what middleware does is (simplied, ignoring other details)
>> 1. listens to query and does load balancing
>> 2. execute query on behalf of client to server with libpq (does not have
>> to be libpq).
>> 3. serialize the result and send it back
>> And the #3 is why I asked for ways to serialize PGresult (of libpq)
>> Client app will deserialize the result and thus be able to interpret
>> PGresult as if it used libpq itself.
> Surely the app should just use libpq, and your middleware should be a
> proxy?
> Like, say, PgPool-II?
> Otherwise you'll have to extract all the results handling parts of libpq
> into some smaller cut-down library and graft on
> serialization/deserialization code. There's nothing built-in for that
> ,since the natural and logical serialization for query results is the
> PostgreSQL wire protocol.
> --
>  Craig Ringer         
>  PostgreSQL Development, 24x7 Support, Training & Services

Reply via email to