Re: pg_upgrade not detecting version properly

From: Bruce Momjian <bruce(at)momjian(dot)us>
To: Chris Ernst <cernst(at)zvelo(dot)com>
Cc: "pgsql-general(at)postgresql(dot)org" <pgsql-general(at)postgresql(dot)org>
Subject: Re: pg_upgrade not detecting version properly
Date: 2012-10-10 15:56:58
Message-ID: 20121010155658.GB11892@momjian.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general pgsql-hackers

On Tue, Oct 9, 2012 at 09:50:22PM -0600, Chris Ernst wrote:
> Hi all,
>
> I'm trying to test using pg_upgrade to go from 9.1.6 to 9.2.1 on Ubuntu
> server 10.04. But when I run pg_upgrade, it tells me I can only run it
> on 8.3 or later.
>
> Old:
> postgres=# SELECT version();
> version
>
> ----------------------------------------------------------------------------------------------------------------
> PostgreSQL 9.1.6 on x86_64-unknown-linux-gnu, compiled by gcc-4.4.real
> (Ubuntu 4.4.3-4ubuntu5.1) 4.4.3, 64-bit
> (1 row)
>
>
> New:
> postgres=# SELECT version();
> version
>
> ----------------------------------------------------------------------------------------------------------------
> PostgreSQL 9.2.1 on x86_64-unknown-linux-gnu, compiled by gcc-4.4.real
> (Ubuntu 4.4.3-4ubuntu5.1) 4.4.3, 64-bit
> (1 row)
>
>
> Yet when I try to run pg_upgrade:
>
> $ /usr/lib/postgresql/9.2/bin/pg_upgrade -b /usr/lib/postgresql/9.1/bin/
> -d /postgresql/9.1/main -B /usr/lib/postgresql/9.2/bin/ -D
> /postgresql/9.2/main -k -c -v
> Running in verbose mode
> Performing Consistency Checks
> -----------------------------
> Checking current, bin, and data directories ok
> Checking cluster versions
> This utility can only upgrade from PostgreSQL version 8.3 and later.
> Failure, exiting
>
> Any idea what could be going on here?
>
> Thank you in advance for your help.

That is cetainly odd. It is using this C code:

if (GET_MAJOR_VERSION(old_cluster.major_version) < 803)
pg_log(PG_FATAL, "This utility can only upgrade from PostgreSQL version 8.3 and later.\n");

which is assigned from this function:

get_major_server_version(ClusterInfo *cluster)
{
FILE *version_fd;
char ver_filename[MAXPGPATH];
int integer_version = 0;
int fractional_version = 0;

snprintf(ver_filename, sizeof(ver_filename), "%s/PG_VERSION",
cluster->pgdata);
if ((version_fd = fopen(ver_filename, "r")) == NULL)
return 0;

if (fscanf(version_fd, "%63s", cluster->major_version_str) == 0 ||
sscanf(cluster->major_version_str, "%d.%d", &integer_version,
&fractional_version) != 2)
pg_log(PG_FATAL, "could not get version from %s\n", cluster->pgdata);

fclose(version_fd);

return (100 * integer_version + fractional_version) * 100;
}

Can you show me what is in the PG_VERSION file in the old cluster? It
should be "9.1".

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

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

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Joe Van Dyk 2012-10-10 16:22:58 Shorthand syntax for triggers
Previous Message Divakar Singh 2012-10-10 15:28:44 Re: libpq-how to add a schema to search path

Browse pgsql-hackers by date

  From Date Subject
Next Message Thom Brown 2012-10-10 16:08:47 Re: Proof of concept: auto updatable views [Review of Patch]
Previous Message Tom Lane 2012-10-10 15:55:12 Re: September 2012 commitfest