Ceci est une ancienne révision du document !
Situation
L'ordinateur a planté, et l'on n'a pas pu/ne peut plus faire de sauvegarde depuis l'interface noalyss.
Néanmoins, on a encore accès aux données sur le disque dur de l'ordinateur qui a planté (et donc à notre base de donnée postgresql).
On prendra un exemple où l'on doit restaurer une base de données construite avec postgresql-9.6 et remise dans une installation à jour avec postgresql-12.
Préambule : sauvegarder la base de données
Copier/coller l'intégralité du dossier /var/lib/version/main/ (où “version” sera un numéro de version, dans notre exemple /var/lib/postgresql/9.6/main/ ) de l'ordinateur planté sur un support de sauvegarde (disque-dur/clé USB).
À partir de maintenant, on travaillera sur la nouvelle installation (dans l'exemple, postgresql-12).
Installer l'ancienne version de postgresql
Soit en la compilant, soit avec les packages de la distribution.
Dans notre exemple, postgresql-9.6, à partir des conseils que l'on trouvera : ici.
Démarrer l'ancienne version de postgresql en prenant en compte les données "historique"
Copier/coller (nécessite les droits admin) le dossier /var/lib/postgresql/9.6/main que l'on a sauvegardé dans le même dossier sur la nouvelle installation. Si le dossier n'existe pas, c'est que l'installation de postgresql ne s'est pas bien faite.
Modifier /etc/postgresql/9.6/main/pg_hba.conf de sorte que :
local all all peer host all all 127.0.0.1/32 trust
Modifier /etc/postgresql/9.6/main/postgresql.conf de sorte que :
listen_addresses = 'localhost' # what IP address(es) to listen on; port = 4000 # (change requires restart)
Copier/coller (nécessite les droits admin) /etc/postgresql/9.6/main/pg_hba.conf et /etc/postgresql/9.6/main/postgresql.conf dans /var/lib/postgresql/9.6/main
Vérifier que tout appartient et est fait par l'utilisateur postgres
chown -R postgres /var/lib/postgresql/9.6/main chmod -R o-rwx /var/lib/postgresql/9.6/main
Puis faire :
(attention, il faut avoir le chemin complet vers pg_ctl)
(attention, à partir de postgresql-12, il faut également faire l'étape “Complément (version >=12)” décrite plus loin, juste avant les lignes suivantes)
/usr/lib/postgresql/9.6/bin/pg_ctl start --pgdata /var/lib/9.6/main/ -o "--port=4000"
Une fois cela fait, avec la nouvelle version de postgresl (pour rappel, c'est la 12 pour cet exemple) faire :
/usr/lib/postgresql/12/bin/pg_dumpall > full-backup.dmp
Puis arrêter le server 9.6
/usr/lib/postgresql/9.6/bin/pg_ctl stop --pgdata /var/lib/9.6/main/ -o "--port=4000"
Restaurer la base de donnée
Restaurez votre backup ,
sudo -i -u postgres psql < noalyss_backup.dmp
Les données , les utilisateurs et les mots de passe seront comme à l'origine .
source : tutoriaux:Procédure de restauration
Complément (version >= 12)
À partir de la version 12 , on ne peut plus utiliser “with oids” qui était le défaut jusque là
Il va falloir faire un script pour les modifier, quand la 9.6 tourne, se connecter et faire pour chaque base de données, en tant que postgres :
postgres@dany:~$ psql db1 postgres=#\o /tmp/x.sql postgres=# select 'alter table '||nsp.nspname ||'.'|| tbl.relname ||'set without oids;' from pg_namespace nsp join pg_class tbl on nsp.oid = tbl.relnamespace where tbl.relhasoids='t' and nsp.nspname <> 'pg_catalog'; postgres=#\o postgres=#\i /tmp/x.sql
où db1 est le nom de la base de donnée numéro un, que l'on trouvera de la manière suivante :
postgres@dany:~$ psql postgres=#\l