Re: pg_upgrade does not completely honor --new-port

Lists: pgsql-hackers
From: Devrim GÜNDÜZ <devrim(at)gunduz(dot)org>
To: PostgreSQL Hackers ML <pgsql-hackers(at)postgresql(dot)org>
Subject: pg_upgrade does not completely honor --new-port
Date: 2012-09-25 14:36:54
Message-ID: 1348583814.23318.12.camel@lenovo01-laptop03.gunduz.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers


Hi,

I just performed a test upgrade from 9.1 to 9.2, and used --new-port
variable. However, the analyze_new_cluster.sh does not include the new
port, thus when I run it, it fails. Any chance to add the port number to
the script?

Also, is it worth to add the value specified in --new-bindir as a prefix
to vacuumdb command in the same script?

Regards,
--
Devrim GÜNDÜZ
Principal Systems Engineer @ EnterpriseDB: http://www.enterprisedb.com
PostgreSQL Danışmanı/Consultant, Red Hat Certified Engineer
Community: devrim~PostgreSQL.org, devrim.gunduz~linux.org.tr
http://www.gunduz.org Twitter: http://twitter.com/devrimgunduz


From: Bruce Momjian <bruce(at)momjian(dot)us>
To: Devrim GÜNDÜZ <devrim(at)gunduz(dot)org>
Cc: PostgreSQL Hackers ML <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: pg_upgrade does not completely honor --new-port
Date: 2012-09-27 02:06:50
Message-ID: 20120927020650.GA29352@momjian.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

On Tue, Sep 25, 2012 at 05:36:54PM +0300, Devrim Gunduz wrote:
>
> Hi,
>
> I just performed a test upgrade from 9.1 to 9.2, and used --new-port
> variable. However, the analyze_new_cluster.sh does not include the new
> port, thus when I run it, it fails. Any chance to add the port number to
> the script?

Well, the reason people normally use the port number is to do a live
check, but obviously when the script is created it isn't doing a check.
I am worried that if I do embed the port number in there, then if they
change the port after the upgrade, they now can't use the script. I
assume users would have PGPORT set before running the script, no?

> Also, is it worth to add the value specified in --new-bindir as a prefix
> to vacuumdb command in the same script?

Wow, I never thought of adding a path to those scripts, but it certainly
makes sense. I have created the attached patch which does this.

--
Bruce Momjian <bruce(at)momjian(dot)us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ It's impossible for everything to be true. +

Attachment Content-Type Size
path.diff text/x-diff 2.1 KB

From: Bruce Momjian <bruce(at)momjian(dot)us>
To: Devrim GÜNDÜZ <devrim(at)gunduz(dot)org>
Cc: PostgreSQL Hackers ML <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: pg_upgrade does not completely honor --new-port
Date: 2012-10-03 01:18:52
Message-ID: 20121003011852.GG30089@momjian.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers


Applied to head and 9.2.

---------------------------------------------------------------------------

On Wed, Sep 26, 2012 at 10:06:50PM -0400, Bruce Momjian wrote:
> On Tue, Sep 25, 2012 at 05:36:54PM +0300, Devrim Gunduz wrote:
> >
> > Hi,
> >
> > I just performed a test upgrade from 9.1 to 9.2, and used --new-port
> > variable. However, the analyze_new_cluster.sh does not include the new
> > port, thus when I run it, it fails. Any chance to add the port number to
> > the script?
>
> Well, the reason people normally use the port number is to do a live
> check, but obviously when the script is created it isn't doing a check.
> I am worried that if I do embed the port number in there, then if they
> change the port after the upgrade, they now can't use the script. I
> assume users would have PGPORT set before running the script, no?
>
> > Also, is it worth to add the value specified in --new-bindir as a prefix
> > to vacuumdb command in the same script?
>
> Wow, I never thought of adding a path to those scripts, but it certainly
> makes sense. I have created the attached patch which does this.
>
> --
> Bruce Momjian <bruce(at)momjian(dot)us> http://momjian.us
> EnterpriseDB http://enterprisedb.com
>
> + It's impossible for everything to be true. +

> diff --git a/contrib/pg_upgrade/check.c b/contrib/pg_upgrade/check.c
> index bed10f8..2785eb7 100644
> --- a/contrib/pg_upgrade/check.c
> +++ b/contrib/pg_upgrade/check.c
> @@ -477,7 +477,7 @@ create_script_for_cluster_analyze(char **analyze_script_file_name)
> ECHO_QUOTE, ECHO_QUOTE);
> fprintf(script, "echo %sthis script and run:%s\n",
> ECHO_QUOTE, ECHO_QUOTE);
> - fprintf(script, "echo %s vacuumdb --all %s%s\n", ECHO_QUOTE,
> + fprintf(script, "echo %s \"%s/vacuumdb\" --all %s%s\n", ECHO_QUOTE, new_cluster.bindir,
> /* Did we copy the free space files? */
> (GET_MAJOR_VERSION(old_cluster.major_version) >= 804) ?
> "--analyze-only" : "--analyze", ECHO_QUOTE);
> @@ -498,7 +498,7 @@ create_script_for_cluster_analyze(char **analyze_script_file_name)
> ECHO_QUOTE, ECHO_QUOTE);
> fprintf(script, "echo %s--------------------------------------------------%s\n",
> ECHO_QUOTE, ECHO_QUOTE);
> - fprintf(script, "vacuumdb --all --analyze-only\n");
> + fprintf(script, "\"%s/vacuumdb\" --all --analyze-only\n", new_cluster.bindir);
> fprintf(script, "echo%s\n", ECHO_BLANK);
> fprintf(script, "echo %sThe server is now available with minimal optimizer statistics.%s\n",
> ECHO_QUOTE, ECHO_QUOTE);
> @@ -519,7 +519,7 @@ create_script_for_cluster_analyze(char **analyze_script_file_name)
> ECHO_QUOTE, ECHO_QUOTE);
> fprintf(script, "echo %s---------------------------------------------------%s\n",
> ECHO_QUOTE, ECHO_QUOTE);
> - fprintf(script, "vacuumdb --all --analyze-only\n");
> + fprintf(script, "\"%s/vacuumdb\" --all --analyze-only\n", new_cluster.bindir);
> fprintf(script, "echo%s\n\n", ECHO_BLANK);
>
> #ifndef WIN32
> @@ -532,7 +532,7 @@ create_script_for_cluster_analyze(char **analyze_script_file_name)
> ECHO_QUOTE, ECHO_QUOTE);
> fprintf(script, "echo %s-------------------------------------------------------------%s\n",
> ECHO_QUOTE, ECHO_QUOTE);
> - fprintf(script, "vacuumdb --all %s\n",
> + fprintf(script, "\"%s/vacuumdb\" --all %s\n", new_cluster.bindir,
> /* Did we copy the free space files? */
> (GET_MAJOR_VERSION(old_cluster.major_version) >= 804) ?
> "--analyze-only" : "--analyze");

>
> --
> Sent via pgsql-hackers mailing list (pgsql-hackers(at)postgresql(dot)org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-hackers

--
Bruce Momjian <bruce(at)momjian(dot)us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ It's impossible for everything to be true. +


From: Devrim GÜNDÜZ <devrim(at)gunduz(dot)org>
To: Bruce Momjian <bruce(at)momjian(dot)us>
Cc: PostgreSQL Hackers ML <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: pg_upgrade does not completely honor --new-port
Date: 2012-10-03 20:00:16
Message-ID: 1349294416.22537.17.camel@lenovo01-laptop03.gunduz.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers


Hi,

On Wed, 2012-09-26 at 22:06 -0400, Bruce Momjian wrote:

> > I just performed a test upgrade from 9.1 to 9.2, and used
> > --new-port variable. However, the analyze_new_cluster.sh does not
> > include the new port, thus when I run it, it fails. Any chance to
> > add the port number to the script?
>
> Well, the reason people normally use the port number is to do a live
> check, but obviously when the script is created it isn't doing a
> check. I am worried that if I do embed the port number in there, then
> if they change the port after the upgrade, they now can't use the
> script. I assume users would have PGPORT set before running the
> script, no?

They can't use the script in each way -- at least we can make it usable
for one case, I think.

Regards,

--
Devrim GÜNDÜZ
Principal Systems Engineer @ EnterpriseDB: http://www.enterprisedb.com
PostgreSQL Danışmanı/Consultant, Red Hat Certified Engineer
Community: devrim~PostgreSQL.org, devrim.gunduz~linux.org.tr
http://www.gunduz.org Twitter: http://twitter.com/devrimgunduz


From: Alvaro Herrera <alvherre(at)2ndquadrant(dot)com>
To: Devrim GÜNDÜZ <devrim(at)gunduz(dot)org>
Cc: Bruce Momjian <bruce(at)momjian(dot)us>, Pg Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: pg_upgrade does not completely honor --new-port
Date: 2012-10-03 20:16:55
Message-ID: 1349294701-sup-7511@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

Excerpts from Devrim GÜNDÜZ's message of mié oct 03 17:00:16 -0300 2012:
>
> Hi,
>
> On Wed, 2012-09-26 at 22:06 -0400, Bruce Momjian wrote:
>
> > > I just performed a test upgrade from 9.1 to 9.2, and used
> > > --new-port variable. However, the analyze_new_cluster.sh does not
> > > include the new port, thus when I run it, it fails. Any chance to
> > > add the port number to the script?
> >
> > Well, the reason people normally use the port number is to do a live
> > check, but obviously when the script is created it isn't doing a
> > check. I am worried that if I do embed the port number in there, then
> > if they change the port after the upgrade, they now can't use the
> > script. I assume users would have PGPORT set before running the
> > script, no?
>
> They can't use the script in each way -- at least we can make it usable
> for one case, I think.

Well, you could have the script set the port number only if the variable
is not set from the calling shell ... you know,
PGPORT=${PGPORT:=the_other_number} . That way, if the user wants to
specify a different port, they have to set PGPORT before calling the
script.

--
Álvaro Herrera http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services


From: Bruce Momjian <bruce(at)momjian(dot)us>
To: Devrim GÜNDÜZ <devrim(at)gunduz(dot)org>
Cc: PostgreSQL Hackers ML <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: pg_upgrade does not completely honor --new-port
Date: 2012-10-03 20:20:27
Message-ID: 20121003202027.GE3470@momjian.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

On Wed, Oct 3, 2012 at 11:00:16PM +0300, Devrim Gunduz wrote:
>
> Hi,
>
> On Wed, 2012-09-26 at 22:06 -0400, Bruce Momjian wrote:
>
> > > I just performed a test upgrade from 9.1 to 9.2, and used
> > > --new-port variable. However, the analyze_new_cluster.sh does not
> > > include the new port, thus when I run it, it fails. Any chance to
> > > add the port number to the script?
> >
> > Well, the reason people normally use the port number is to do a live
> > check, but obviously when the script is created it isn't doing a
> > check. I am worried that if I do embed the port number in there, then
> > if they change the port after the upgrade, they now can't use the
> > script. I assume users would have PGPORT set before running the
> > script, no?
>
> They can't use the script in each way -- at least we can make it usable
> for one case, I think.

Well, my assumption is that they are unlikely to move the old _binary_
directory, but they are more likely to change the port number. My point
is that if they change the port number to the default from a
non-default, or they set the PGPORT environment variable, the script
will work. If we hard-code the port, it would not work.

In fact, pg_upgrade defaults to use port 50432 if they don't supply one.
We would embed the port number only if they supplied a custom port
number, but again, they might change that before going live with the new
server.

I guess I am confused why you would use pg_upgrade, and start the new
server on a non-default port that isn't the same as PGPORT.

--
Bruce Momjian <bruce(at)momjian(dot)us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ It's impossible for everything to be true. +


From: Bruce Momjian <bruce(at)momjian(dot)us>
To: Alvaro Herrera <alvherre(at)2ndquadrant(dot)com>
Cc: Devrim GÜNDÜZ <devrim(at)gunduz(dot)org>, Pg Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: pg_upgrade does not completely honor --new-port
Date: 2012-10-03 20:23:39
Message-ID: 20121003202339.GF3470@momjian.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

On Wed, Oct 3, 2012 at 05:16:55PM -0300, Alvaro Herrera wrote:
> Excerpts from Devrim GÜNDÜZ's message of mié oct 03 17:00:16 -0300 2012:
> >
> > Hi,
> >
> > On Wed, 2012-09-26 at 22:06 -0400, Bruce Momjian wrote:
> >
> > > > I just performed a test upgrade from 9.1 to 9.2, and used
> > > > --new-port variable. However, the analyze_new_cluster.sh does not
> > > > include the new port, thus when I run it, it fails. Any chance to
> > > > add the port number to the script?
> > >
> > > Well, the reason people normally use the port number is to do a live
> > > check, but obviously when the script is created it isn't doing a
> > > check. I am worried that if I do embed the port number in there, then
> > > if they change the port after the upgrade, they now can't use the
> > > script. I assume users would have PGPORT set before running the
> > > script, no?
> >
> > They can't use the script in each way -- at least we can make it usable
> > for one case, I think.
>
> Well, you could have the script set the port number only if the variable
> is not set from the calling shell ... you know,
> PGPORT=${PGPORT:=the_other_number} . That way, if the user wants to
> specify a different port, they have to set PGPORT before calling the
> script.

Good idea, but that is only going to work on Unix, and in fact only
using certain shells. I don't think we want to go there, do we? I
could expand that out to a normal shell _if_ statement, but again, only
works on Unix.

What we _could_ do is to add a comment line at the top that defines a
string that can be supplied, and default it to the port number; that
would work on Unix and Windows, e.g.

# uncomment and adjust if you want a special port number
# PGPORT_STR="-p 5435"
# export PGPORT

For Windows it would be "REM". Is everyone happy with that?

--
Bruce Momjian <bruce(at)momjian(dot)us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ It's impossible for everything to be true. +