Re: Question and suggestion about application binary compatibility policy - Mailing list pgsql-hackers

From Tsunakawa, Takayuki
Subject Re: Question and suggestion about application binary compatibility policy
Date
Msg-id 0A3221C70F24FB45833433255569204D1F57CAB5@G01JPEXMBYT05
Whole thread Raw
In response to Re: Question and suggestion about application binary compatibility policy  (Craig Ringer <craig@2ndquadrant.com>)
Responses Re: Question and suggestion about application binary compatibility policy
List pgsql-hackers

From: pgsql-hackers-owner@postgresql.org [mailto:pgsql-hackers-owner@postgresql.org] On Behalf Of Craig Ringer

While that's probably OK, it's not especially desirable. The typical Windows deployment model involves the application bundling all its direct dependencies except when those are provided by a runtime redistributable designed for that purpose.

 

 

I think so, too, but I'm not confident that's typical.  Some people may think of PostgreSQL binaries as a shared component for their applications and place it in one place, just like the PostgreSQL library package is in /usr/lib/pgsql.

 

 

- Use the app with newer PostgreSQL major versions without rebuilding the app.  That is, the users just replaces the PostgreSQL client.

 

... especially since there isn't a client-only PostgreSQL distribution Windows.

 

 

There's a client-only installation method as follows, although I haven't checked whether EnterpriseDB, OpenSCG, or any other PostgreSQL-based products provide client-only installation.

https://www.postgresql.org/docs/devel/static/install-windows-full.html#AEN30192

 

[Excerpt]

--------------------------------------------------

If you want to install only the client applications and interface libraries, then you can use these commands:

 

install c:\destination\directory client

--------------------------------------------------

 

 

How about adding an article about application binary compatibility in the following section, as well as chapters for libpq, ECPG, etc?

 

It would be sensible to better define the binary compatibility expectations that clients may rely upon and, when they are broken, a managed way in which they're broken (soname bump, etc).

 

If you have an interest in the area it might be worth drafting a proposal after taking a look at past binary compatibility discussions on -hackers.

 

Sure, I'll submit a patch to pgsql-docs.  Thanks to Michael's confirmation, I could answer the customer's question, so this is not an immediate task now.  But I'll do.

 

 

- On-disk format

- Wire protocol

- SQL-level (data types, syntax, encoding handling, settings, ...)

 

Yes, I recognize these items.  I omitted them because:

 

- On-disk format: this is handled in the PostgreSQL manual article about upgrading

- Wire protocol: I believe the compatibility will be retained

- SQL-level: ditto

 

But if you feel a need for their compatibility description for completeness, I'll add it.  ... Yes, the explicit explanation may be necessary so that users are assured that the PostgreSQL compatibility policy matches their expectation.

 

 

The simplest solution would be to incorporate the soname, so it becomes libpq0509.dll for example. Like VS does with the VS runtime. The main downside is that because it's not a true soname and the OS has no such concept, the linker for everything compiled against that DLL must specify the versioned DLL name, it can't just link to 'libpq' .

 

Although I haven’t examined yet, some directive in .def file might enable applications to specify libpq.lib at build time and to link with libpq5.dll at run time.

 

 

Regards

Takayuki Tsunakawa

 

pgsql-hackers by date:

Previous
From: Craig Ringer
Date:
Subject: Re: Statement timeout
Next
From: Craig Ringer
Date:
Subject: Re: Question and suggestion about application binary compatibility policy