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?
-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.
Ä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.