Vous n'êtes pas identifié(e).
Pages : 1
Bonjour.
Je vous explique le souci, je souhaite exécuter un pg_restore sous Windows via la commande exec() de PHP.
Je sais qu'il s'agit d'un problème de droit, je ne sais pas si c'est Windows ou PostGres qui pose problème (via le pg_hba.conf ?).
En effet, si j'exécute la commande directement via l'invite de commande cela fonctionne, mais pas par un appel en PHP (pareil si je passe par un intermédiaire en .bat).
Des idées ?
PS : j'avais réussi à régler le problème pour un pg_dump.exe en passant à TRUST dans le pg_hba.conf, mais cela ne change rien ici.
Hors ligne
regarder les logs iis et postgres voir même du journal d'évènements
mais c'est surement un problème de droits
Dernière modification par kenrio (03/06/2013 15:10:20)
Hors ligne
Non, pas d'erreurs dans les log de postgres, ni dans le journal des événements.
Mais en regardant le gestionnaire des tâches, c'est l'utilisateur "Système" qui ne fonctionne pas, car ça marche avec l'administrateur (commande directe depuis l'invite).
Hors ligne
quel est la version de windows ?
Hors ligne
La commande exec() de php sera lancée avec l'utilisateur système lançant le serveur http (apache, iis ou autre). Il faut donc que celui-ci puisse se connecter à la base avec le bon utilisateur. Votre restauration se passe bien quand vous l'exécutez avec un script bat ? Pouvez-vous fournir la sortie de la commande exec(), celle-ci devrait contenir plus d'informations sur l'erreur.
De plus, par défaut la durée d'un script php est limitée par défaut il me semble, il sera peut-être aussi nécessaire de la modifier (max_execution_time).
Julien.
https://rjuju.github.io/
Hors ligne
En effet j'utilise W7 avec Apache.
Si j'exécute le .bat via l'exec() de PHP j'ai le même souci, mais si je l’exécute manuellement c'est bon. C'est donc bien un problème du droit entre les utilisateurs Windows (ici système) et Postgresql.
J'ai modifié le max_execution_time pour patienter 5 minutes, mais pg_restore ne retourne aucune erreur après ça.
Au final, la base existe bien avec une partie des fonctions, mais aucune table.
Hors ligne
et les logs d'apache ? (oui j'aime les logs)
Dernière modification par kenrio (03/06/2013 16:57:24)
Hors ligne
Rien de pertinent, juste le même log que postgresql.
Ça se termine ainsi cependant :
2013-06-03 17:03:00 CEST LOG: checkpoints are occurring too frequently (15 seconds apart)
2013-06-03 17:03:00 CEST HINT: Consider increasing the configuration parameter "checkpoint_segments".
Hors ligne
c'est la log apache ça oO
Hors ligne
Là c'est Postgresql, mais Apache retourne juste les erreurs de postgres, il n'y a pas plus d'informations
ex:
[Mon Jun 03 17:14:09 2013] [error] [client 127.0.0.1] pg_restore: connecting to database for restore\r
[Mon Jun 03 17:14:09 2013] [error] [client 127.0.0.1] pg_restore: creating DATABASE caa_cad\r
[Mon Jun 03 17:14:09 2013] [error] [client 127.0.0.1] pg_restore: [archiver (db)] Error while PROCESSING TOC:\r
[Mon Jun 03 17:14:09 2013] [error] [client 127.0.0.1] pg_restore: [archiver (db)] Error from TOC entry 4064; 1262 4443756 DATABASE caa_cad postgres\r
[Mon Jun 03 17:14:09 2013] [error] [client 127.0.0.1] pg_restore: [archiver (db)] could not execute query: ERROR: database "caa_cad" already exists\r
[Mon Jun 03 17:14:09 2013] [error] [client 127.0.0.1] Command was: CREATE DATABASE caa_cad WITH TEMPLATE = template0 ENCODING = 'LATIN1';\r
Dernière modification par Pierre (03/06/2013 17:14:49)
Hors ligne
J'ai l'impression que la requête finie par aboutir, mais va mettre 10x plus de temps.
Hors ligne
Quelle est la ligne de commande pour la restauration ? De quel volume de donnée s'agit-il, et y a-t-il beaucoup d'index ? Sur le log apache, on voit que le script arrive bien à se connecter, et affiche une erreur car la base de donnée existe déjà.
Les messages indiquant les checkpoint trop fréquents sont normaux, et indiquent que des données sont bien restaurées. Si aucune donnée n'est visible sur le serveur, peut-être s'agit-il d'une très grosse table mettant plus de 5 minutes à se restaurer, et étant donc annulée par le timeout php ?
Julien.
https://rjuju.github.io/
Hors ligne
Voici la fameuse commande :
"C:\Program Files\pgAdmin III\1.16\pg_restore.exe" --create -d postgres --format=c --ignore-version --verbose --host=localhost --port=5432 -U monUSer maBase.backup
Le Backup est un peu costaud, il pèse 88.8Mo pour :
- 107 Tables
- 684 fonctions
J'ai placé le timeout à 15 minutes et ça ne suffit pas, alors que directement en ligne de commande ça met moins de 2 minutes :s
Hors ligne
Bonjour.
Je n'ai toujours pas trouvé de solution, help !
Hors ligne
Hé bien, pour être franc, c'est plus un problème PHP que PostgreSQL. Vous aurez certainement plus de chances sur un forum PHP.
Guillaume.
Hors ligne
Bien, merci. Je vais regarder sur un forum PHP alors
Hors ligne
Pages : 1