Re: multi-install PostgresNode fails with older postgres versions
Mark Dilger <mark.dilger@enterprisedb.com>
From: Mark Dilger <mark.dilger@enterprisedb.com>
To: Alvaro Herrera <alvherre@alvh.no-ip.org>
Cc: Andrew Dunstan <andrew@dunslane.net>,
Michael Paquier <michael@paquier.xyz>,
Jehan-Guillaume de Rorthais <jgdr@dalibo.com>,
PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2021-04-22T15:46:09Z
Lists: pgsql-hackers
> On Apr 22, 2021, at 8:09 AM, Alvaro Herrera <alvherre@alvh.no-ip.org> wrote:
>
>>
>> + # Accept standard formats, in case caller has handed us the output of a
>> + # postgres command line tool
>> + $arg = $1
>> + if ($arg =~ m/\(?PostgreSQL\)? (\d+(?:\.\d+)*(?:devel)?)/);
>> +
>> + # Split into an array
>> + my @result = split(/\./, $arg);
>> +
>> + # Treat development versions as having a minor/micro version one less than
>> + # the first released version of that branch.
>> + if ($result[$#result] =~ m/^(\d+)devel$/)
>> + {
>> + pop(@result);
>> + push(@result, $1, -1);
>> + }
>
> It's a bit weird to parse the "devel" bit twice. Would it work to leave
> (?:devel)? out of the capturing parens that becomes $1 in the first
> regex and make it capturing itself, so you get "devel" in $2, and decide
> based on its presence/absence? Then you don't have to pop and push a -1.
The first regex should match things like "12", "12.1", "14devel", or those same things prefixed with "(PostgreSQL) ", and strip off the "(PostgreSQL)" part if it exists. But the code should also BAIL_OUT if the regex completely fails to match.
—
Mark Dilger
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
Commits
-
Teach PostgresVersion all the ways to mark non-release code
- aa271209f6d9 14.0 landed
-
Make PostgresNode version aware
- 4c4eaf3d1920 14.0 landed
-
Avoid unfortunate IPC::Run path caching in PostgresNode
- 95c3a1956ec9 14.0 landed
-
Change pg_ctl to detect server-ready by watching status in postmaster.pid.
- f13ea95f9e47 10.0 cited