Vous n'êtes pas identifié(e).

#1 04/03/2020 19:02:56

lemjid
Membre

Mise à jour PostgreSQL

Bonjour,

J'ai vu plusieurs messages sur le net y compris celui-ci de guillaume L.:

"Il est à savoir qu'il n'y a aucune garantie par la communauté PostgreSQL qu'une sauvegarde réalisée avec un pg_dump en
version X puisse être restaurée en version X-1. Il est toujours conseillé de sauvegarder avec la version sur laquelle on veut restaurer."

Dans le forum PostgreSQLFr : https://forums.postgresql.fr/viewtopic.php?id=4879

En résumé, c'est conseillé dans le cas de mise à jours majeure de faire la sauvegarde via les outils (pg_dump, et pg_dumpall) en utilisant les binaires de la version de destination.

Mon souhait, est de comprendre les arguments de ce message (recommandation). Si possible s'il vous plait de me donner le liens dans le document officiel ou quelque chose similaire (wiki postgres, planete, site developpeurs PG...etc.) car sauf erreur de ma part, je n'ai pas vu ceci (en tout cas pour la version 9.6.x).

Par avance Merci.

Hors ligne

#2 04/03/2020 19:31:56

rjuju
Administrateur

Re : Mise à jour PostgreSQL

La raison est simple: les développeurs n'ont pas de machine à remonter le temps, et ne peuvent donc pas assurer la compatibilité de pg_dump/pg_restore version X avec une future version X+1.

Une fois la version X+1 sortie, le support pour les anciennes versions est préservé, mais le support pour la nouvelle version n'est pas rajouté dans les anciennes branche, la politique étant de ne backporter que les correctifs de bugs et failles de sécurité.

Hors ligne

#3 04/03/2020 19:35:32

pifor
Membre

Re : Mise à jour PostgreSQL

https://docs.postgresql.fr/9.6/upgrading.html dit:

18.6.1. Mettre à jour les données via pg_dumpall

Une méthode de mise à jour revient à sauvegarder les données d'une version majeure de PostgreSQL™ et de la recharger dans une autre -- pour cela, vous devez utiliser un outil de sauvegarde logique comme pg_dumpall ; une sauvegarde au niveau système de fichiers ne fonctionnera pas. Des vérifications sont faites pour vous empêcher d'utiliser un répertoire de données avec une version incompatible de PostgreSQL™, donc aucun mal ne sera fait si vous essayez de lancer un serveur d'une version majeure sur un répertoire de données créé par une autre version majeure.)

Il est recommandé d'utiliser les programmes pg_dump et pg_dumpall provenant de la nouvelle version de PostgreSQL™, pour bénéficier des améliorations apportées à ces programmes. Les versions actuelles de ces programmes peuvent lire des données provenant de tout serveur dont la version est supérieure ou égale à la 7.0.


Pierre

Hors ligne

#4 05/03/2020 12:39:08

lemjid
Membre

Re : Mise à jour PostgreSQL

Bonjour,

Merci pour vos réponses.
Pour "rjuju", ce n'est pas la politique des M-à-J PostgreSQL que j'investigue.
J'essaie de comprendre (avec vos aides bien sur) les contraintes techniques qui nécessite cette recommandation.
Par exemple pour le V12. Je sais que la colonne OID à été enlevée. Que le "create table with OID" n'est plus possible.
Comme le pg_dump fait un select il vaut mieux faire le dump avec les binaires de la V12 pour upgrader une version inférieure. Pour moi c'est un argument claire, simple à comprendre et précis.
C'est ce que je recherche via ma requête.
Par avance Merci.

Hors ligne

#5 05/03/2020 14:15:46

rjuju
Administrateur

Re : Mise à jour PostgreSQL

lemjid a écrit :

Par exemple pour le V12. Je sais que la colonne OID à été enlevée. Que le "create table with OID" n'est plus possible.
Comme le pg_dump fait un select il vaut mieux faire le dump avec les binaires de la V12 pour upgrader une version inférieure. Pour moi c'est un argument claire, simple à comprendre et précis.
C'est ce que je recherche via ma requête.

Et comment un pg_dump 11.0 pourrait correctement gérer ce cas ?

Hors ligne

#6 05/03/2020 16:06:36

lemjid
Membre

Re : Mise à jour PostgreSQL

Je suis désolé, je n'ai pas bien compris la question. Mais je dirais car le "create table ...with oids;" est toujours possible avec la V11.

[dvsgdas00b00004:postgres:pgserver02]$psql smart_engagement
psql (11.2)
Type "help" for help.

localhost:5433 postgres@smart_engagement=# create table t2 (c1 int) with oids;
CREATE TABLE
localhost:5433 postgres@smart_engagement=#

En tout cas initialement je suis en quête d'arguments techniques (explications) sur les recommandations de faire le dump avant mise à jour avec l'outil "pg_dump" de la version de destination?
C'est vraiment ce que je recherche précisément.

Merci pour votre aide

Hors ligne

#7 05/03/2020 16:24:50

rjuju
Administrateur

Re : Mise à jour PostgreSQL

Je voulais dire comment un pg_dump 11.0 pourrait fonctionner sur une version 12.X.  C'est là l'argument technique, les catalogues de postgres ne sont pas stables, et tous les clients qui utilisent ce catalogue (que ce soit pg_dump, pg_restore, pgsql...) ne peuvent par définition pas gérer un changement qui a eu lieu après qu'ils aient été écrits.  Seule la compatibilitré descendante est assurée, pas ascendante.

Le terme "recommandé" utilisé ici n'est pas vraiment adapté à mon avis, car il n'y a aucune garantie que cela fonctionne, que si ça ne fonctionne pas ce n'est pas un bug mais une mauvaise utilisation.

Hors ligne

#8 05/03/2020 17:16:45

lemjid
Membre

Re : Mise à jour PostgreSQL

Merci Julien, c'est très intéressant ce que tu viens de dire et ça me convient parfaitement.
Si je me permet de te demander STP, je peux trouver quelque part "écrit, url...etc." ce que j'ai lu dans ton message:
(Seule la compatibilitré descendante est assurée, pas ascendante.).
Je précise que ce n'est pas pour mettre en cause ce que tu as dis bien au contraire.
Je voulais juste avoir un appui officiel pour faire valoir ceci.

Hors ligne

#9 05/03/2020 17:22:50

rjuju
Administrateur

Re : Mise à jour PostgreSQL

Il s'agit de la politique de backport dont je parlais dans mon premier message, voir https://www.postgresql.org/support/versioning/

Each major version receives bug fixes and, if need be, security fixes that are released at least once every three months in what we call a "minor release."

Le fait que par exemple pg_dump 9.1.0 ne soit pas compatible avec un postgres 12 n'est pas un bug, donc pas d'ajout de compatibilité ascendante dans les anciennes versions.

Hors ligne

#10 05/03/2020 19:10:51

gleu
Administrateur

Re : Mise à jour PostgreSQL

Lire la doc semblerait très indiqué. Je sais qu'elle est volumineuse mais là, il s'agit de pg_dump, c'est rapide. Dans https://www.postgresql.org/docs/12/app-pgdump.html se trouve ce paragraphe :

Because pg_dump is used to transfer data to newer versions of PostgreSQL, the output of pg_dump can be expected to load into PostgreSQL server versions newer than pg_dump's version. pg_dump can also dump from PostgreSQL servers older than its own version. (Currently, servers back to version 8.0 are supported.) However, pg_dump cannot dump from PostgreSQL servers newer than its own major version; it will refuse to even try, rather than risk making an invalid dump. Also, it is not guaranteed that pg_dump's output can be loaded into a server of an older major version — not even if the dump was taken from a server of that version. Loading a dump file into an older server may require manual editing of the dump file to remove syntax not understood by the older server.

La phrase particulièrement intéressante étant : "it is not guaranteed that pg_dump's output can be loaded into a server of an older major version".

Et à lire tout le paragraphe, on en retient ce que je disais dans une autre discusion, on doit utiliser la version majeure de pg_dump correspondant à la version majeure du serveur sur lequel on souhaite restaurer. Ceci est garanti de fonctionner pour toutes les versions depuis la 8.0. Tout le reste n'est pas garanti (ce qui ne veut pas dire que ça ne fonctionnera pas, mais que le risque est présent).


Guillaume.

Hors ligne

#11 06/03/2020 14:48:07

lemjid
Membre

Re : Mise à jour PostgreSQL

Bonjour,

Merci beaucoup "rjuju, pifor et gleu". Merci pour l’intérêt, la disponibilité et merci pour les réponses.

__________________________________________

Badreddine.

Dernière modification par lemjid (06/03/2020 14:49:45)

Hors ligne

Pied de page des forums