agora inbox for pgsql-interfaces@postgresql.org  
help / color / mirror / Atom feed
From: Pavel Golub <pavel@microolap.com>
To: Sebastien FLAESCH <sf@4js.com>
Cc: pgsql-interfaces@postgresql.org
Subject: Re: libpq compatibility policy across versions
Date: Tue, 1 Oct 2013 15:28:20 +0300
Message-ID: <113082781.20131001152820@gf.microolap.com> (raw)
In-Reply-To: <522F0B6B.1040006@4js.com>
References: <522F0B6B.1040006@4js.com>
List-Unsubscribe:  <mailto:majordomo@postgresql.org?body=unsub%20pgsql-interfaces>

Hello, Sebastien.

You wrote:

SF> Hi all,

SF> We have a libpq client application written in C.

SF> We want to deliver the software so that can it be used with different
SF> PostgreSQL client versions, from 8.3 to 9.3 (and future versions).

SF> So far, we build (compile and link) a binary with each major version
SF> of PostgreSQL (8.3, 8.4, 9.0, 9.1, 9.2, 9.3) - in fact we have shared
SF> libraries (database driver) for each PostgreSQL version.

SF> Is this the proper way, or could we just compile/link with a given
SF> version (9.3) and assume that it's backward compatible with any
SF> prior version such as 8.3 ?

Yes, you should use the latest client library. It's compatible with
all prior versions.

SF> Assuming that we could dynamically load the libpq.so client, search
SF> for existing API symbols and only use them if present?

SF> Is this risky? Do the C headers define C structures that are compatible
SF> between newer and older versions?

SF> I would expect some note about libpq compatibility policy here:

SF> http://www.postgresql.org/docs/9.3/static/libpq-build.html

SF> I can see that the lib version number of libpq.so.x.y changes
SF> for each major version:

SF> /opt3/dbs/pgs/9.2/lib/libpq.so -> libpq.so.5.5
SF> /opt3/dbs/pgs/9.2/lib/libpq.so.5 -> libpq.so.5.5
SF> /opt3/dbs/pgs/9.2/lib/libpq.so.5.5
SF> /opt3/dbs/pgs/9.3.0/lib/libpq.so -> libpq.so.5.6
SF> /opt3/dbs/pgs/9.3.0/lib/libpq.so.5 -> libpq.so.5.6
SF> /opt3/dbs/pgs/9.3.0/lib/libpq.so.5.6

SF> The binaries are dependent from libpq.so.5:

SF> $ ldd -r dbmpgs92x.so
SF>         ...
SF>         libpq.so.5 => /opt3/dbs/pgs/9.2.3/lib/libpq.so.5 (0xb77bb000)
SF>         ...

SF> What does this mean?

SF> Theoritically, a binary linked in a 9.3 env can use le libpq.so version
SF> of a prior version down to 8.2 ... (8.1 has libpq.so.4)

SF> The main question is about C header compatibility:

SF> - Compile + link with PostgreSQL client version X.Y.?
SF> - What PostgreSQL client version can be used at runtime?

SF> Thanks.
SF> Seb





-- 
With best wishes,
 Pavel                          mailto:pavel@gf.microolap.com



-- 
Sent via pgsql-interfaces mailing list (pgsql-interfaces@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-interfaces



view thread (8+ messages)  latest in thread

Message-ID: <113082781.20131001152820@gf.microolap.com>
Permalink:  ../113082781.20131001152820@gf.microolap.com/
Also on:    postgresql.org/message-id/113082781.20131001152820@gf.microolap.com

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-interfaces@postgresql.org
  Cc: pavel@microolap.com, sf@4js.com
  Subject: Re: libpq compatibility policy across versions
  In-Reply-To: <113082781.20131001152820@gf.microolap.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox