Hoi
Vandaag heb ik geprobeerd om onze postgres databaseserver te upgraden van 7.2.1 naar 7.4.2.
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.
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:
Wel plpgsql -> plpgsql already exists
Geen plpgsql -> plpgsql_call_handler does not exist

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
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
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...
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
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
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 ]