Postgres upgrade 7.1.2 -> 7.4.2

Pagina: 1
Acties:

  • usr-local-dick
  • Registratie: September 2001
  • Niet online
Hoi

Vandaag heb ik geprobeerd om onze postgres databaseserver te upgraden van 7.2.1 naar 7.4.2.
edit:
titel is fout maar kan hem niet veranderen...

Het upgraden van de serversoftware was geen probleem. Alleen bleek het een drama om onze databases mee te nemen.

Zoals de docs al aangeven is de kans groot dat de table structure verandert tijdens major releases, en dat tijdens zo'n upgrade beter een dump/restore aktie kan worden gedaan.
Onze databases bevatten tables, blobs, triggers, functions, views, de hele meuk dus.

Nu bleek het dumpen en restoren van databases in dezelfde versies al niet helemaal vlekkeloos te verlopen (zie o.a. hier), maar daar was wel een beetje om heen te scripten.

Totdat ik de dumps van 7.2.1 wilde importeren in 7.4.2. Dit lukte echt op geen enkele manier.

code:
1
2
3
4
5
postgres@debian:~$ pg_restore -v -v -v -r -d core ../postgres.20040622DV/core.pgdump
pg_restore: connecting to database for restore
pg_restore: creating PROCEDURAL LANGUAGE plpgsql
pg_restore: [archiver (db)] could not execute query: ERROR:  language "plpgsql" already exists
pg_restore: *** aborted because of error


Hmmm, plpgsql bestaat al, dat klopt aangezien mijn nieuwe db op basis van template1 is aangemaakt, en daar zit hij in. Dan maar eens proberen met een lege db op basis van template0, daar zit niets in:

code:
1
2
3
4
5
postgres@debian:~$ pg_restore -v -v -v -r -d core ../postgres.20040622DV/core.pgdump
pg_restore: connecting to database for restore
pg_restore: creating PROCEDURAL LANGUAGE plpgsql
pg_restore: [archiver (db)] could not execute query: ERROR:  function plpgsql_call_handler() does not exist
pg_restore: *** aborted because of error


Wel plpgsql -> plpgsql already exists
Geen plpgsql -> plpgsql_call_handler does not exist
8)7 8)7

Na veel klooien lag het volgens mij aan de volgorde waarin pg_dump zijn werk doet, zie ook hier
.
Die blijkt niet altijd goed om met pg_restore iets te kunnen restoren :X

Anyway, uiteindelijk bleek de data perfect over te zetten door gebruik te maken van twee servers. Onze productie server draait nog 7.1.2 en daar zit de goeie data in. De dev server draait 7.4.2 en die is leeg.
Door nu op de devserver via het netwerk de data van de productieserver te dumpen krijg je een dumpfile met de oude data, maar in het nieuwe dumpformaat.
Die kan vervolgens probleemloos geimporteerd worden met pg_restore :)

[ Voor 3% gewijzigd door usr-local-dick op 22-06-2004 22:03 ]