On Mon, 2022-12-05 at 16:12 +1300, Thomas Munro wrote:
> 1. I think we should seriously consider provider = ICU63. I still
> think search-by-collversion is a little too magical, even though it
> clearly can be made to work. Of the non-magical systems, I think
> encoding the choice of library into the provider name would avoid the
> need to add a second confusing "X_version" concept alongside our
> existing "X_version" columns in catalogues and DDL syntax, while
> still
> making it super clear what is going on.
As I understand it, this is #2 in your previous list?
Can we put the naming of the provider into the hands of the user, e.g.:
CREATE COLLATION PROVIDER icu63 TYPE icu
AS '/path/to/libicui18n.so.63', '/path/to/libicuuc.so.63';
In this model, icu would be a "provider kind" and icu63 would be the
specific provider, which is named by the user.
That seems like the least magical approach, to me. We need an ICU
library; the administrator gives us one that looks like ICU; and we're
happy.
It avoids a lot of the annoyances we're discussing, and puts the power
in the hands of the admin. If they want to allow minor version updates,
they specify the library with .so.63, and let the symlinking handle it.
Of course, we can still do some sanity checks (WARNINGs or ERRORs) when
we think something is going wrong; like the version of ICU is too new,
or the reported version (ucol_getVersion()) doesn't match what's in
collversion. But we basically get out of the business of understanding
ICU versioning and leave that up to the administrator.
It's easier to document, and would require fewer GUCs (if any). And it
avoids mixing version information from another project into our data
model.
--
Jeff Davis
PostgreSQL Contributor Team - AWS