PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come scaricare i dati di oggetti di grandi dimensioni da Postgres 9.4 e quindi importarli in Postgres8.x?

Il problema è che il dump usa la funzione pg_catalog.lowrite(integer, bytea) per creare l'oggetto grande e la sintassi predefinita how bytea i letterali sono rappresentati in PostgreSQL è cambiato con la versione 9.0.

C'è il parametro bytea_output che può essere impostato su escape per produrre bytea nel vecchio formato con le versioni successive di PostgreSQL. Ahimè, pg_dump non rispetta quel parametro durante la creazione di dump, utilizza sempre il "nuovo" hex formato.

Il risultato è che un dump contenente oggetti di grandi dimensioni da una versione PostgreSQL di 9.0 o successive non può essere ripristinato in un database precedente alla 9.0.

Dovrai trasferire questi oggetti di grandi dimensioni in qualche altro modo, probabilmente scrivendo un programma di migrazione.

Potresti proporre (sulla mailing list pgsql-hackers) un'opzione per pg_dump che permette di impostare bytea_escape per il dump, ma potresti incontrare resistenza, poiché il ripristino di un dump da una versione successiva di PostgreSQL a una precedente non è supportato.