Hi Dan,

I'm not sure if I missed something in this thread. But wouldn't the following suffice for the use case described?

If, as described, you want to continue using the installed version 15 instead of the current PostgreSQL version 17 on the box, this can be achieved by setting the following line in /etc/make.conf:

DEFAULT_VERSIONS+= pgsql=15

This makes version 15 the default version for that box, which should also be used by the port databases/p5-DBD-Pg (per USES=pgsql).

However, I don't have a box on which I can try this out :(

Regards,
Rainer


Am 20.05.25 um 11:30 schrieb Dan Mahoney (Ports):


On May 19, 2025, at 22:47, Mathieu Arnold <[email protected]> wrote:

Well, you have three choices :

- Upgrade your PostgreSQL server. Using packages means you upgrade
 everything all the time.
- Build your own packages with the default PostgreSQL set to 15.
- Do not upgrade.

The FreeBSD packages system, and ports, is a "rolling release", you have
to move with the flow.

PostgreSQL major version changes have always been difficult, it is not
new.
Until someone (hint, it could be you) automates the upgrades, or allows
multiple version installations by putting each in its own space, like
it's done in other oses, put things in lib/postgresqlXX/{bin,lib},
share/postgresqlXX, you will have to do so the upgrades manually, by
following the instructions in UPDATING.

After drinking some coffee and looking over the porter's handbook,I believe I've managed to flavor this port in my local copy -- by adding a bunch of if-blocks for the various versions of postgres that simply set the USES= line to the appropriate versions, like this.

FLAVORS=        default pg13 pg14 pg15 pg16 pg17 pg18
FLAVOR?=        ${FLAVORS:[1]}

pg13_PKGNAMESUFFIX=     -pg13
pg14_PKGNAMESUFFIX=     -pg14
pg15_PKGNAMESUFFIX=     -pg15
pg16_PKGNAMESUFFIX=     -pg16
pg17_PKGNAMESUFFIX=     -pg17
pg18_PKGNAMESUFFIX=     -pg18


.if ${FLAVOR} == default
USES=           perl5 pgsql
.endif
.if ${FLAVOR} == pg13
USES=           perl5 pgsql:13
.endif
.if ${FLAVOR} == pg14
USES=           perl5 pgsql:14
...and so on.

It's a bit long, but that's only because we're supporting six(!!) versions of postgres.  (Seven, actually, but /usr/ports/Mk/Uses/pgsql.mk only lists VALID_PGSQL_VER=        13 14 15 16 17 18)

There may be a more elegant way by extracting the string from the flavorname and using it to set the requisite PG version versus a bunch of "ifs", and there may be some kind of "switch" or "case" statement in these makefiles that I'm not aware of.  I'm not super versed in makefiile string-bashing.  This is not a large package, and I don't know if the ports tree has a magic syntax for "build for many supported versions of a USES, but this would solve it.  Extra build time is also fairly minimal.

I can supply the full patch.  Is it possible this could be accepted?  If this works, then the version of the perl db driver stays locked with whatever DB you've installed, and because it's a flavor, it should cause things that require this (for example, pgtop, which is a perl program) to work with any version that you've installed versus forcing you onto the default version.  It would mean when perl gets upgraded, the new version comes in with its current flavor (which it didn't previously because we had it locked, so it was still sitting in the perl5.38 libs).

If you upgrade your version of postgres, the solver might or might not be able to find you the corresponding flavored port, but if not, at least there would be something in the repos that you could install, which is still better than the situation now.

Thoughts?

-Dan

PS: You mention UPDATING.  Is there planned to be a way to display that via pkg to users who are affected but who do not have a ports tree checked out?  That would be useful.


Reply via email to