Migration von 8.0.8(RHEL) nach 8.3(Debian 5.0)

Hallo zusammen,

hab mich heute mal 3 Std. durchs Forum gekämpft aber moch nicht so recht den richtigen Hinweis gefunden.
Wie im Titel zu sehen versuche ich mehrere Postgres Datenbanken von einem 8.0.8(RHEL)Server nach 8.3(Debian 5.0) um zu ziehen.
Zur Zeit sind beide Server aktiv.

Was mich schon etwas stutzig macht: das Verzeichnis /var/lib/pgsql/data ist auf dem Server 6GB gross. Ein pg_dumpall gerade mal 108MB.

Woher kommt dass? Muss da noch mehr umgezogen werden?

Wenn ich den pg_dumpall in den neuen Server mit
psql -f dump
importieren will, meckert der neue Server mit der Formatierung (ist latin1 und der Server will utf-8). Irgendwie stehe ich jetzt auf dem Schlauch und weiss nicht mehr weiter.

Wie kann ich das denn am elegantesten machen? Bin für jeden Tipp dankbar.

Kann viele Ursachen haben. Viele Indexe, viel bloat in den Tabellen. Möglicherweise ein starker Hinweis auf eine schlampige Vacuum-Strategie.

Wenn ich den pg_dumpall in den neuen Server mit
psql -f dump
importieren will, meckert der neue Server mit der Formatierung (ist latin1 und der Server will utf-8). Irgendwie stehe ich jetzt auf dem Schlauch und weiss nicht mehr weiter.

client_encoding passend setzen.

Andreas, aus dem sonnigen Malta…

Der Dump enthält nur die reinen Daten. In der Datenbank selbst befinden sich aber z. B. auch Indexes, die teilweise mehr Speicherplatz in Anspruch nehmen können als die Daten selbst.
Außerdem entsteht durch Änderungen in der Datenbank ein gewisser Overhead beim Speicherplatz (Stichworte: MVCC, VACUUM), die es im Dump natürlich nicht gibt.

Für das Encoding musst du den Datenbankcluster mit den passenden Parametern initialisieren. “man initdb” gibt dir da Hilfestellungen.

wow ,
vielen Dank erstmal für die raschen Antworten.

Verstehe ich dich richtig ads:
ich muss meine neue DB auf dem neuen Server auch als latin1 einrichten?

Und können blobs für die Grösse der DB verantwortlich sein?

Die Blobs sollten ja in deinem Export auch drin sein.

Wenn das eine 8.0 ist, lief dort wahrscheinlich nicht mal ein regelmäßiges VACUUM. Von daher kann die Größe der DB schon mit der Zeit angewachsen sein.
Importiere doch mal deinen Export in eine 8.0 Datenbank und schau, wie groß der Import hinterher ist.

Oh, ich habe noch was vergessen: du solltest NUR das /var/lib/pgsql/data/base Verzeichnis betrachten. Da können auch noch normale Logdateien drin liegen, außerden befinden sich in /var/lib/pgsql/data/pg_xlog noch die Transaktionslogs. Das alles nimmt auch Speicherplatz weg.


Zum Import: “kommt drauf an”. Willst du in Zukunft UTF8 oder Latin1 verwenden?
Steht denn in deinem Export so etwas wie “SET client_encoding = …” irgendwo am Anfang drin?

Alternativ könntest du die Datenbanken auch einzeln mit pg_dump exportieren und in eine Verbindung einfügen, die bereits ein passendes “client_encoding” gesetzt hat. Dann wandelt PG die Daten beim Import um.

mein /var/lib/pgsql/data/base Verzeichnis hat 5,6GB. Der Dump nur 108MB …

Also bei pg_dumpall habe ich keine Option für Blobs gefunden. Macht der das standardmässig?
in meinem File steht foldendes: SET client_encoding = ‘LATIN1’;

Also das stimmt zumindest mal. Da ich in Zukunf in der DB keine UTF-8 Sachen unterbringen muss habe ich auch kein Problem das umzustellen. Aber wie mache ich das? Fange ich dann ganz von Vorne an?

Wie groß sind denn die einzelnen Unterverzeichnisse? Aber an sich sieht das Verhältnis von Dump zu “base”-Verzeichnis schon nach sehr viel Bloat in der Datenbank aus.

Nun, wenn du das Encoding umstellst, musst du den bestehenden Datenbankcluster löschen und komplett neu initialisieren. Dafür ist das Programm “initdb” zuständig.

Haha,
ich hab eben mal das Tool pgAdmin3 mit vacuum auf die DB losgelassen : /var/lib/pgsql/data/base hat nur noch 308MB.
An dem Server war wohl wirklich lange niemand mehr dran …

Ich versuche mal ob ich das Anlegen eines neuen Cluster mit latin1 encoding hinbekomme.
Ich melde mich bei Erfolg(und sonst natürlich auch ;-))

Nochmals Danke !

So , auf Debian Lenny gits 2 schöne Scripts die einem das Wegschmeissen und einrichten des DB Cluster erleichtern.
Ich habe also folgendes gemacht:
mit

dpkg-reconfigure locales

habe ich noch de_DE.ISO_8859-1 erzeugt. Danach habe ich mit

pg_dropcluster 8.3 main

den Cluster gelöscht und dann mit

pg_createcluster --locale de_DE.ISO_8859-1 8.3 main

den neuen Cluster mit der entsprechenden locale erzeugt.

Jetzt habe ich auch den alten und neuen Server nebeneinander stehen und muss nur noch einen eleganten Weg finden die komplette Datenbank zu migrieren.