Thread: Upgrade to new version

Upgrade to new version

From
Reiner Dassing
Date:
Hello all!

I would like to ask  what would be the best procedure to upgrade to a
new version of PostgreSQL in a production system when there is a 'initdb'
necessary?

Situation:
We are running PostgreSQL in a production system. There are about 1000
selects and about 100 inserts per minute.


To upgrade to PostgreSQL 7.2.3 there is an 'initdb' necessary.

The straight forward approach is to shut down the PostgreSQL server
and restore the saved databases.
But, this approach is not possible for us.

We need a "smooth" switch over with a downtime of maximum 5 minutes.

It is possible to set up an other filesystem and another PostgreSQL server
with another port number to initdb the database and restore the databases
and tables backuped at a given time.
But meanwhile some new inserts (well a lot of them) did happen in the existing
databases.
How should the missed inserts be transferred to the new PostgreSQL server?

What would you recommend for this switch?

Thank you for your discussion!
--
--
Mit freundlichen Gruessen / With best regards
    Reiner Dassing


Re: Upgrade to new version

From
Bruce Momjian
Date:
I don't have any good news for you.  Yes, you can set up a server on a
different port and perform a dump and reload while both systems are up,
but as you say, you are going to miss inserts during the dump because
pg_dump takes a snapshot when it starts.

My only suggestion is to keep the old database SELECT-only during the
dump, or somehow gather the changes that happen after the dump and
manually move them to the new database.

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

Reiner Dassing wrote:
> Hello all!
>
> I would like to ask  what would be the best procedure to upgrade to a
> new version of PostgreSQL in a production system when there is a 'initdb'
> necessary?
>
> Situation:
> We are running PostgreSQL in a production system. There are about 1000
> selects and about 100 inserts per minute.
>
>
> To upgrade to PostgreSQL 7.2.3 there is an 'initdb' necessary.
>
> The straight forward approach is to shut down the PostgreSQL server
> and restore the saved databases.
> But, this approach is not possible for us.
>
> We need a "smooth" switch over with a downtime of maximum 5 minutes.
>
> It is possible to set up an other filesystem and another PostgreSQL server
> with another port number to initdb the database and restore the databases
> and tables backuped at a given time.
> But meanwhile some new inserts (well a lot of them) did happen in the existing
> databases.
> How should the missed inserts be transferred to the new PostgreSQL server?
>
> What would you recommend for this switch?
>
> Thank you for your discussion!
> --
> --
> Mit freundlichen Gruessen / With best regards
>     Reiner Dassing
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 6: Have you searched our list archives?
>
> http://archives.postgresql.org
>

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

Re: Upgrade to new version

From
"Dan Langille"
Date:
On 10 Oct 2002 at 9:46, Reiner Dassing wrote:

> To upgrade to PostgreSQL 7.2.3 there is an 'initdb' necessary.

This caused me to ask around off-list.  An initdb is required only if
you are upgrading from from pre-7.2.X.
--
Dan Langille
I'm looking for a computer job:
http://www.freebsddiary.org/dan_langille.php


Re: Upgrade to new version

From
Andrew Sullivan
Date:
On Thu, Oct 10, 2002 at 09:46:14AM +0200, Reiner Dassing wrote:
> Hello all!
>
> I would like to ask  what would be the best procedure to upgrade to a
> new version of PostgreSQL in a production system when there is a 'initdb'
> necessary?
>
> Situation:
> We are running PostgreSQL in a production system. There are about 1000
> selects and about 100 inserts per minute.

If you're upgrading to 7.2.3 from 7.2.2, no initdb is required.  But
anyway, here's a general strategy:

If you are using replication (and if not, this might be a good time
to start looking at it), you can use it to minimise downtime.  Here's
how:

1.    Add an additional replication target.  Put up the new back
end on another port, and start replicating into it.

2.    When you are totally caught up (i.e. replication is merely
sending in its most recent changes in each cycle), shut off the
applications.

3.    Reconfigure your client applications to use the new back end.

4.    Check that replication has really caught up.  Shut off the
old back end (for safety).

5.    Re-start your applications.

I've done this.  It works.  You still have to shut off for a brief
period, but it's minutes, and not hours.

A

--
----
Andrew Sullivan                         204-4141 Yonge Street
Liberty RMS                           Toronto, Ontario Canada
<andrew@libertyrms.info>                              M2P 2A8
                                         +1 416 646 3304 x110