On Tue, 2022-11-29 at 12:32 -0500, Robert Haas wrote: > You know more about this than I do, for sure, so don't let my vote > back the project into a bad spot.
I'm going back and forth myself. I haven't found a great answer here yet. > But, yeah, the thing you mention > here is what I'm worried about. Without a way to force a certain > behavior for a certain particular collation, you don't have an escape > valve if the global library ordering isn't doing what you want. One bit of weirdness is that I may have found another ICU problem. First, install 63.1, and you get (editing for clarity): $ ls -l /path/to/libicui18n.so.63* /path/to/libicui18n.so.63 -> libicui18n.so.63.1 /path/to/libicui18n.so.63.1 $ ls -l /path/to/libicuuc.so.63* /path/to/libicuuc.so.63 -> libicuuc.so.63.1 /path/to/libicuuc.so.63.1 $ ls -l /path/to/libicudata.so.63* /path/to/libicudata.so.63 -> libicudata.so.63.1 /path/to/lib/libicudata.so.63.1 $ ldd /path/to/libicui18n.so.63.1 libicuuc.so.63 => /path/to/libicuuc.so.63 libicudata.so.63 => /path/to/libicudata.so.63 OK, now install 63.2. Then you get: $ ls -l /path/to/libicui18n.so.63* /path/to/libicui18n.so.63 -> libicui18n.so.63.2 /path/to/libicui18n.so.63.1 /path/to/libicui18n.so.63.2 $ ls -l /path/to/libicuuc.so.63* /path/to/libicuuc.so.63 -> libicuuc.so.63.2 /path/to/libicuuc.so.63.1 /path/to/libicuuc.so.63.2 $ ls -l /path/to/libicudata.so.63* /path/to/libicudata.so.63 -> libicudata.so.63.2 /path/to/libicudata.so.63.1 /path/to/libicudata.so.63.2 $ ldd /path/to/libicui18n.so.63.2 libicuuc.so.63 => /path/to/libicuuc.so.63 libicudata.so.63 => /path/to/libicudata.so.63 The problem is that the specific minor version 63.1 depends on only the major version of its ICU link dependencies. When loading libicui18n.so.63.1, you are actually pulling in libicuuc.so.63.2 and libicudata.so.63.2. When I tried this with Thomas's patch, it caused some confusing problems. I inserted a check that, when you open a library, that the requested and reported versions match, and the check failed when multiple minors are installed. In other words, opening libicui18n.so.63.1 reports a version of 63.2! (Note: I compiled ICU with --enable-rpath, but I don't think it matters.) Summary: even locking down to a minor version does not seem to identify a specific ICU library, because its shared library dependencies do not reference a specific minor version. > It's entirely possible that the scenario I'm worried about is too > remote in practice to be concerned about. I don't know how this stuff > works well enough to be certain. It's just that, on the basis of > previous experience, (1) it's not that uncommon for people to > actually > end up in situations that we thought shouldn't ever happen and (2) > code that deals with collations is more untrustworthy than average. Yeah... -- Jeff Davis PostgreSQL Contributor Team - AWS