PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment vider les données d'objets volumineux de Postgres 9.4, puis les importer dans Postgres8.x ?

Le problème est que le dump utilise la fonction pg_catalog.lowrite(integer, bytea) pour créer le grand objet, et la syntaxe par défaut comment bytea les littéraux sont représentés dans PostgreSQL a changé avec la version 9.0.

Il y a le paramètre bytea_output qui peut être défini sur escape pour afficher bytea dans l'ancien format avec les versions ultérieures de PostgreSQL. Hélas, pg_dump ne respecte pas ce paramètre lors de la création de dumps, il utilise toujours le "nouveau" hex formater.

Le résultat est qu'un vidage contenant des objets volumineux d'une version PostgreSQL 9.0 ou ultérieure ne peut pas être restauré dans une base de données antérieure à la version 9.0.

Vous devrez transférer ces gros objets d'une autre manière, probablement en écrivant un programme de migration.

Vous pouvez proposer (sur la liste de diffusion pgsql-hackers) une option pour pg_dump qui permet de définir bytea_escape pour le vidage, mais vous pourriez rencontrer de la résistance, car la restauration d'un vidage d'une version ultérieure de PostgreSQL vers une version plus ancienne n'est pas prise en charge.