2017-10-12 6 views
1

J'ai une ancienne copie de mon dossier postgresql db (/var/lib/postgresql/9.5/main/) depuis mon serveur. Maintenant, je veux récupérer les données des fichiers. J'ai donc copié le dossier principal sur ma machine locale et changé la configuration de postgresql (/etc/postgresql/9.5/main/postgresql.conf) pour pointer vers ce répertoire. Aussi j'ai changé l'autorisation du répertoire principal à l'utilisateur postgres. Après avoir redémarré le service postgresql (sudo service postgresql restart), cela ne fonctionne pas vraiment.Restaurer postgres db à partir du dossier

Qu'est-ce que je fais mal? (Oui, je sais, pg_dump est le moyen préféré, mais de cette façon ...) Donc, ma question, est-ce que cela fonctionne même? Ou existe-t-il un autre moyen d'extraire les données?

tout est fait sur Ubuntu 16.04.

Edit:

le fichier journal après avoir modifié le fichier postgresql.conf pour pointer vers le nouveau répertoire.

2017-10-13 06:15:43 CEST [968-1] LOG: database system was shut down at 2017-10-13 00:21:04 CEST 
2017-10-13 06:15:43 CEST [968-2] LOG: MultiXact member wraparound protections are now enabled 
2017-10-13 06:15:43 CEST [959-1] LOG: database system is ready to accept connections 
2017-10-13 06:15:43 CEST [975-1] LOG: autovacuum launcher started 
2017-10-13 06:15:43 CEST [983-1] [unknown]@[unknown] LOG: incomplete startup packet 
2017-10-13 06:47:55 CEST [975-2] LOG: autovacuum launcher shutting down 
2017-10-13 06:47:55 CEST [959-2] LOG: received smart shutdown request 
2017-10-13 06:47:55 CEST [972-1] LOG: shutting down 
2017-10-13 06:47:55 CEST [972-2] LOG: database system is shut down 
2017-10-13 06:47:55 CEST [4667-1] FATAL: database files are incompatible with server 
2017-10-13 06:47:55 CEST [4667-2] DETAIL: The database cluster was initialized without USE_FLOAT8_BYVAL but the server was compiled with USE_FLOAT8_BYVAL. 
2017-10-13 06:47:55 CEST [4667-3] HINT: It looks like you need to recompile or initdb. 

Ok, cela m'a indiqué this. Le serveur est un armv7l, alors que la machine locale est x86_64 (uname -m). Donc, il n'y a aucune chance d'obtenir les données?

thx, Luc

+0

"ne fonctionne pas vraiment". Sortie de journal? Qu'est-ce qui se passe exactement ou non? Détails! Modifiez la question pour ajouter au moins une sortie de journal. –

+0

@CraigRinger merci pour le conseil, mis à jour ma question – Luc

Répondre

1

Si c'est vraiment vrai que votre répertoire de données d'un système ARM7l, et votre système local est x86_64, vous allez avoir des difficultés.

L'erreur immédiate à propos de USE_FLOAT8_BYVAL est due au fait que ARM7L est de 32 bits et ne peut pas transmettre une valeur de valeur de virgule flottante de 64 bits (8 octets). Votre hôte 64 bits peut. Mais si vous avez recompilé un postgres personnalisé avec USE_FLOAT8_BYVAL désactivé, vous risquez de rencontrer d'autres problèmes.

Je suggère d'installer PostgreSQL sur un système ARM correspondant pour récupérer les données. Les répertoires de données pour PostgreSQL ne sont pas portables entre architectures (pour des raisons de performances).

Si vous n'avez plus accès au système ARM, un émulateur tel que qemu devrait pouvoir vous aider. Sinon, peut-être vous pouvez compiler un PostgreSQL modifié (probablement en commençant par 32 bits x86) qui peut lire le répertoire de données, avec les options de configuration appropriées, etc. Je n'ai jamais eu besoin d'essayer cela.

+0

Le système ARM est encore opérationnel. Là, le dossier postgresql est copié sur un périphérique USB, à partir de laquelle je l'ai copié sur ma machine locale. Aussi sur le serveur j'ai essayé de lier (changeant le dossier de postgresql.conf pour pointer vers le nouveau répertoire) au dossier copié par dispositif d'usb, fini avec le même résultat. – Luc

+0

Oui, cela ne changerait rien. Si la machine ARM est toujours active, pourquoi ne pas simplement 'pg_dump' la base de données? –

+0

que voulez-vous dire par "juste" pg_dump? – Luc