L'ordinateur a planté, et l'on n'a pas pu/ne peut plus faire de sauvegarde depuis l'interface noalyss.
Parce que :
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.
On utilisera la version 9.6 et 12 , adaptez aux versions que vous avez
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).
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.
Copier/coller (nécessite les droits admin) le dossier /var/lib/postgresql/9.6/main (=POSTGRESBASE) 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.
On peut choisir un autre dossier. En choisissant d'écraser l'installation de postgresql , vous détruisez les données qui y seraient
Modifiez /etc/postgresql/9.6/main/pg_hba.conf ou créez le fichier dans POSTGRESBASE de sorte que :
local all all peer host all all 127.0.0.1/32 trust
Modifiez /etc/postgresql/9.6/main/postgresql.conf ou créez le fichier dans POSTGRESBASE 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 POSTGRESBASE
Vérifier que tout appartient et est fait par l'utilisateur postgres
POSTGRESBASE=/var/lib/postgresql/9.6/main chown -R postgres $POSTGRESBASE # /var/lib/postgresql/9.6/main chmod -R o-rwx $POSTGRESBASE #/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) (!) Rappel /var/lib/9.6/main est POSTGRESBASE
/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), en indiquant le port de la 9.6 faire :
/usr/lib/postgresql/12/bin/pg_dumpall --port=4000 > full-backup.dmp
Il faut se connecter sur le port de la version 9.6 , puis arrêter ce server
/usr/lib/postgresql/9.6/bin/pg_ctl stop --pgdata /var/lib/9.6/main/ -o "--port=4000"
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
Cette étape est absolument optionnelle et ne fera qu'éviter des warnings, vous pouvez l'ignorer.
À 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