On Thu, Jul 05, 2012 at 06:28:31PM -0400, Tom Lane wrote:
> Payal Singh <[email protected]> writes:
> > On Thu, Jul 5, 2012 at 12:15 PM, Craig Ringer <[email protected]> wrote:
> >> If you start 9.1 on a copy of the backup then cleanly stop it again, does
> >> pg_upgrade then run?
>
> > Thank you. That worked.
>
> ISTM that pg_upgrade should check that the old cluster was shut down
> cleanly, ie pg_control has state = "shut down". AFAICT from some
> testing, it currently only checks that there is no postmaster.pid file,
> which is easily bypassed by users who might not realize that it's not
> safe to run pg_upgrade against a filesystem backup.
I am confused. pg_upgrade certainly starts/stops the old and new server
with pg_ctl before copying any files --- isn't that sufficent?
> BTW, I also noticed while trying to test this that pg_upgrade is
> currently completely broken for the case of taking PGDATAOLD or
> PGDATANEW from the environment rather than switches. This is because
> the existing coding in option.c fails to set up the "pgconfig" fields
> in such cases.
Oh, good catch. Fixed with the attached patch, and backpatched to 9.2.
--
Bruce Momjian <[email protected]> http://momjian.us
EnterpriseDB http://enterprisedb.com
+ It's impossible for everything to be true. +
diff --git a/contrib/pg_upgrade/option.c b/contrib/pg_upgrade/option.c
new file mode 100644
index 43394a0..960fcda
*** a/contrib/pg_upgrade/option.c
--- b/contrib/pg_upgrade/option.c
***************
*** 21,27 ****
static void usage(void);
! static void check_required_directory(char **dirpath,
char *envVarName, char *cmdLineOption, char *description);
--- 21,27 ----
static void usage(void);
! static void check_required_directory(char **dirpath, char **configpath,
char *envVarName, char *cmdLineOption, char *description);
*************** parseCommandLine(int argc, char *argv[])
*** 203,216 ****
}
/* Get values from env if not already set */
! check_required_directory(&old_cluster.bindir, "PGBINOLD", "-b",
"old cluster binaries reside");
! check_required_directory(&new_cluster.bindir, "PGBINNEW", "-B",
"new cluster binaries reside");
! check_required_directory(&old_cluster.pgdata, "PGDATAOLD", "-d",
! "old cluster data resides");
! check_required_directory(&new_cluster.pgdata, "PGDATANEW", "-D",
! "new cluster data resides");
}
--- 203,216 ----
}
/* Get values from env if not already set */
! check_required_directory(&old_cluster.bindir, NULL, "PGBINOLD", "-b",
"old cluster binaries reside");
! check_required_directory(&new_cluster.bindir, NULL, "PGBINNEW", "-B",
"new cluster binaries reside");
! check_required_directory(&old_cluster.pgdata, &old_cluster.pgconfig,
! "PGDATAOLD", "-d", "old cluster data resides");
! check_required_directory(&new_cluster.pgdata, &new_cluster.pgconfig,
! "PGDATANEW", "-D", "new cluster data resides");
}
*************** or\n"), old_cluster.port, new_cluster.po
*** 284,298 ****
* user hasn't provided the required directory name.
*/
static void
! check_required_directory(char **dirpath, char *envVarName,
! char *cmdLineOption, char *description)
{
if (*dirpath == NULL || strlen(*dirpath) == 0)
{
const char *envVar;
if ((envVar = getenv(envVarName)) && strlen(envVar))
*dirpath = pg_strdup(envVar);
else
pg_log(PG_FATAL, "You must identify the directory where the %s.\n"
"Please use the %s command-line option or the %s environment variable.\n",
--- 284,303 ----
* user hasn't provided the required directory name.
*/
static void
! check_required_directory(char **dirpath, char **configpath,
! char *envVarName, char *cmdLineOption,
! char *description)
{
if (*dirpath == NULL || strlen(*dirpath) == 0)
{
const char *envVar;
if ((envVar = getenv(envVarName)) && strlen(envVar))
+ {
*dirpath = pg_strdup(envVar);
+ if (configpath)
+ *configpath = pg_strdup(envVar);
+ }
else
pg_log(PG_FATAL, "You must identify the directory where the %s.\n"
"Please use the %s command-line option or the %s environment variable.\n",
--
Sent via pgsql-bugs mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs