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

#1 03/06/2013 11:31:41

Pierre
Membre

pg_restore.exe ne fonctionne pas sous Windows en PHP

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

#2 03/06/2013 15:09:55

kenrio
Membre

Re : pg_restore.exe ne fonctionne pas sous Windows en PHP

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

#3 03/06/2013 15:43:53

Pierre
Membre

Re : pg_restore.exe ne fonctionne pas sous Windows en PHP

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

#4 03/06/2013 16:20:00

kenrio
Membre

Re : pg_restore.exe ne fonctionne pas sous Windows en PHP

quel est la version de windows ?

Hors ligne

#5 03/06/2013 16:25:38

rjuju
Administrateur

Re : pg_restore.exe ne fonctionne pas sous Windows en PHP

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).

Hors ligne

#6 03/06/2013 16:32:20

Pierre
Membre

Re : pg_restore.exe ne fonctionne pas sous Windows en PHP

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

#7 03/06/2013 16:57:06

kenrio
Membre

Re : pg_restore.exe ne fonctionne pas sous Windows en PHP

et les logs d'apache ? (oui j'aime les logs)

Dernière modification par kenrio (03/06/2013 16:57:24)

Hors ligne

#8 03/06/2013 17:06:19

Pierre
Membre

Re : pg_restore.exe ne fonctionne pas sous Windows en PHP

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

#9 03/06/2013 17:11:26

kenrio
Membre

Re : pg_restore.exe ne fonctionne pas sous Windows en PHP

c'est la log apache ça oO

Hors ligne

#10 03/06/2013 17:13:50

Pierre
Membre

Re : pg_restore.exe ne fonctionne pas sous Windows en PHP

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

#11 03/06/2013 17:46:55

Pierre
Membre

Re : pg_restore.exe ne fonctionne pas sous Windows en PHP

J'ai l'impression que la requête finie par aboutir, mais va mettre 10x plus de temps.

Hors ligne

#12 03/06/2013 20:22:24

rjuju
Administrateur

Re : pg_restore.exe ne fonctionne pas sous Windows en PHP

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 ?

Hors ligne

#13 04/06/2013 08:33:28

Pierre
Membre

Re : pg_restore.exe ne fonctionne pas sous Windows en PHP

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

#14 12/06/2013 13:13:48

Pierre
Membre

Re : pg_restore.exe ne fonctionne pas sous Windows en PHP

Bonjour.

Je n'ai toujours pas trouvé de solution, help !

Hors ligne

#15 12/06/2013 23:21:31

gleu
Administrateur

Re : pg_restore.exe ne fonctionne pas sous Windows en PHP

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

#16 13/06/2013 09:02:53

Pierre
Membre

Re : pg_restore.exe ne fonctionne pas sous Windows en PHP

Bien, merci. Je vais regarder sur un forum PHP alors smile

Hors ligne

Pied de page des forums