Re: pgsql: Build src/port files as a library with -fPIC, and use that in li - Mailing list pgsql-hackers

From Tom Lane
Subject Re: pgsql: Build src/port files as a library with -fPIC, and use that in li
Date
Msg-id 27653.1548774621@sss.pgh.pa.us
Whole thread Raw
In response to Re: pgsql: Build src/port files as a library with -fPIC, and usethat in li  (Christoph Berg <myon@debian.org>)
Responses Re: pgsql: Build src/port files as a library with -fPIC, and usethat in li  (Christoph Berg <myon@debian.org>)
Re: pgsql: Build src/port files as a library with -fPIC, and use thatin li  (Robert Haas <robertmhaas@gmail.com>)
List pgsql-hackers
Christoph Berg <myon@debian.org> writes:
> Re: Tom Lane 2018-09-28 <20671.1538142538@sss.pgh.pa.us>
>> I proposed in
>> https://www.postgresql.org/message-id/19581.1538077716@sss.pgh.pa.us
>> that we should remove pqsignal, as well as
>> pg_utf_mblen
>> pg_encoding_to_char
>> pg_char_to_encoding
>> pg_valid_server_encoding
>> pg_valid_server_encoding_id
>>
>> from libpq's exports, on the grounds that (a) nobody should be using
>> those (they're undocumented as exports), and (b) anybody who is using
>> them should get them from libpgport/libpgcommon instead.  Thoughts?

> It took a while to notice, but this change does break 8.2's initdb if
> libpq5 from PG12 is installed:
> $ /usr/lib/postgresql/8.2/bin/initdb
> /usr/lib/postgresql/8.2/bin/initdb: symbol lookup error: /usr/lib/postgresql/8.2/bin/initdb: undefined symbol:
pqsignal

Well, 8.2 is *very* long out of support, and there are plenty of
nasty bugs you're at risk of if you keep using it.  So I don't
find this to be a good argument for contorting what we do in v12.

If you really want to keep using 8.2 (and even make new installations
with it!?), you could back-patch the 8.3 patch that made sure that
initdb didn't absorb pqsignal, pg_encoding_to_char, etc from libpq.
It looks like what you'd need is a portion of the Makefile changes
from 8468146b03c87f86162cee62e0de25f6e2d24b56.

BTW, I noticed this in that patch's commit message:

    Going forward, we want to fix things so that encoding IDs can be changed
    without an ABI break, and this commit includes the changes needed to allow
    libpq's encoding IDs to be treated as fully independent of the backend's.
    The main issue is that libpq clients should not include pg_wchar.h or
    otherwise assume they know the specific values of libpq's encoding IDs,
    since they might encounter version skew between pg_wchar.h and the libpq.so
    they are using.  To fix, have libpq officially export functions needed for
    encoding name<=>ID conversion and validity checking; it was doing this
    anyway unofficially.

So it was wrong of me to propose moving pg_encoding_to_char() et al
into libpgcommon: doing so would've re-introduced the hazard of
client code misinterpreting the encoding IDs returned by
PQclientEncoding() (and how the heck did I miss that libpq.sgml
does document that function for exactly that purpose?).

Fortunately, I didn't do that ...

            regards, tom lane


pgsql-hackers by date:

Previous
From: John Naylor
Date:
Subject: Re: WIP: Avoid creation of the free space map for small tables
Next
From: Christoph Berg
Date:
Subject: Re: [PATCH] Pass COPT and PROFILE to CXXFLAGS as well