On Fri, 2021-04-30 at 13:33 -0500, Justin Pryzby wrote: > On Sat, Mar 06, 2021 at 03:01:43PM -0500, Tom Lane wrote: > > v4-0001 mostly teaches test.sh about specific changes that have to be > > made to historic versions of the regression database to allow them > > to be reloaded into current servers. As already discussed, this is > > really duplicative of knowledge that's been embedded into the buildfarm > > client over time. It'd be better if we could refactor that so that > > the buildfarm shares a common database of these actions with test.sh. > > And said database ought to be in our git tree, so committers could > > fix problems without having to get Andrew involved every time. > > I think this could be represented as a psql script, at least in > > versions that have psql \if (but that came in in v10, so maybe > > we're there already). > > I started this. I don't know if it's compatible with the buildfarm client, > but > I think any issues maybe can be avoided by using "IF EXISTS".
Here are the differences I see on a first pass (without putting too much thought into how significant the differences are). Buildfarm code I'm comparing against is at [1]. - Both versions drop @#@ and array_cat_accum, but the buildfarm additionally replaces them with a new operator and aggregate, respectively. - The buildfarm's dropping of table OIDs is probably more resilient, since it loops over pg_class looking for relhasoids. - The buildfarm handles (or drops) several contrib databases in addition to the core regression DB. - The psql script drops the first_el_agg_any aggregate and a `TRANSFORM FOR integer`; I don't see any corresponding code in the buildfarm. - Some version ranges are different between the two. For example, abstime_/reltime_/tinterval_tbl are dropped by the buildfarm if the old version is < 9.3, while the psql script drops them for old versions <= 10. - The buildfarm drops the public.=> operator for much older versions of Postgres. I assume we don't need that here. - The buildfarm adjusts pg_proc for the location of regress.so; I see there's a commented placeholder for this at the end of the psql script but it's not yet implemented. As an aside, I think the "fromv10" naming scheme for the "old version <= 10" condition is unintuitive. If the old version is e.g. 9.6, we're not upgrading "from 10". --Jacob [1] https://github.com/PGBuildFarm/client-code/blob/main/PGBuild/Modules/TestUpgradeXversion.pm