PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie kann man die großen Objektdaten von Postgres 9.4 ausgeben und sie dann in Postgres8.x importieren?

Das Problem ist, dass der Dump die Funktion pg_catalog.lowrite(integer, bytea) verwendet um das große Objekt zu erstellen, und die Standard-Syntax wie bytea Die Darstellung von Literalen in PostgreSQL hat sich mit Version 9.0 geändert.

Es gibt den Parameter bytea_output die auf escape gesetzt werden kann um bytea auszugeben im alten Format mit späteren PostgreSQL-Versionen. Ach, pg_dump respektiert diesen Parameter beim Erstellen von Dumps nicht, es verwendet immer den „neuen“ hex formatieren.

Das Ergebnis ist, dass ein Dump mit großen Objekten aus einer PostgreSQL-Version von 9.0 oder höher nicht in einer Datenbank vor 9.0 wiederhergestellt werden kann.

Sie müssen diese großen Objekte auf andere Weise übertragen, wahrscheinlich indem Sie ein Migrationsprogramm schreiben.

Sie könnten (auf der Mailingliste pgsql-hackers) eine Option für pg_dump vorschlagen das erlaubt, bytea_escape zu setzen für den Dump, aber Sie könnten auf Widerstand stoßen, da das Wiederherstellen eines Dumps von einer neueren PostgreSQL-Version auf eine ältere Version nicht unterstützt wird.