Wiederherstellen von Large Objects mit pg_restore

Hi,

bei einem Dump-Restore Zyklus mit Partitionierung einiger großen Tabellen sind leider die Large Objects verlorengegangen, weil das -b Flag bei pg_dump vergessen wurde. Nun habe ich einen großen Dump (gezippt 10GB, SQL-Format 53GB) aus dem Backup wieder herstellen lassen, in dem anscheinend die large objects enthalten sind. Es müssten so an die 20.000 LOs sein.

Wie kann ich nun die Large Objects (und nur die large Objects) in eine bestehende Datenbank wiederherstellen, ohne den Rest zu überschreiben?

Der man-page nach zu urteilen:

-b

       --blobs
              Include large objects in the dump. This is the default behavior except when --schema, --table, or --schema-only is specified,  so
              the -b switch is only useful to add large objects to selective dumps.

hast Du mit dem weglassen von -b alles richtig gemacht, oder?

Was Du hättest machen können/sollen: -Fc setzen, oder hast das gemacht? Falls ja, dann kannst Du ein mit pg_restore -l Listfile aller Objekte erstellen und dann dieses Listfile editieren und dann wieder als Parameter beim pg_restore mit -L angeben.

Falls das Plain ASCII - Format ist (Dein Dump), dann brauchst halt einen $EDITOR, der mit 53GB kein Problem hat.


Andreas

Ähm, ich glaube ich muss das Problem nochmal genauer beschreiben (und gleich die Lösung mit).

Beim Ziehen der Dumps wurde -t (–tables) benutzt, daher war -b nicht mehr default, und daher fehlten die Blobs.

Nun hatte ich eine Datenbank auf Produktion laufen, bei der die Blobs fehlten, und von dem vorherigen Stand mit Blobs hatte ich aber noch einen Dump (dieser wurde ohne --tables erzeugt, daher sind die Blobs enthalten).

Nun suchte ich nach einem Weg, aus dem alten Dump nur die Blobs wiederherzustellen, ohne dabei den Rest der Datenbank anzufassen. Das geht mit pg_restore nicht. Ich habe es deshalb so gelöst:

  • Dump auf einen Testrechner kopieren
  • Dort DB wiederherstellen
  • eine leere Dummytabelle anlegen
  • pg_dump -b -Fc -t dummytabelle
  • diesen Dump auf dem Zielsystem wiederherstellen.

Etwas kompliziert und aufwändig, aber hat geklappt.