Vous n'êtes pas identifié(e).
Salut,
je plante depuis 2 jour sur ce probleme.
je souhaite faire un dump de postgresql depuis mon application web.
voici mon code
<?PHP
chdir("c:\Program files\PostgreSQL\9.0\bin");
system('pg_dump --host 127.0.0.1 --port 5432 -U postgres --format custom --blobs -f C:\projet\sauvegardes\backupwind_19.backup db_pk_v4');
?>
quand je lance la page, ca me cree un fichier vide. et pourtant le sript
pg_dump --host 127.0.0.1 --port 5432 -U postgres --format custom --blobs -f C:\projet\sauvegardes\backupwind_19.backup db_pk_v4
marche bien avec MSDOS et me cree le dump de ma base dans le repertoire C:\projet\sauvegardes\.
Quelqu'un a une solution?
Hors ligne
Il faudrait récupérer le message d'erreur de la commande pg_dump pour en savoir plus. system renvoit la dernière ligne renvoyée par la commande, ça pourrait déjà donner plus d'infos. Vous pouvez aussi placer un deuxième argument à command pour connaître le code retour de la fonction. Cela pourrait être utile de connaître ce code.
Rien à voir avec votre question mais bon... l'option --blobs ne sert à rien dans votre commande. Elle n'est utile que quand vous voulez sauvegarder les large objects et que vous avez demandé un filtre sur une table ou un schéma. Si vous n'avez pas de filtre (comme c'est le cas ici), l'option --blobs ne fait rien de plus.
Guillaume.
Hors ligne
Votre utilisateur de session web il a le droit de lancer un pg_dump ?
Hors ligne
voici ma derniere modif
<?PHP
chdir("c:\Program files\PostgreSQL\9.0\bin");
system('pg_dump --host 127.0.0.1 --port 5432 -U postgres --no-password --format custom -f C:\projet_conception_bd\3_livrables\sauvegardes\backupDB_wind_19.backup db_pk_v4', $retour);
if(!$retour) echo 'l\'execution s\'est mal passe';
else echo $retour;
?>
ca m'affiiche 1 comme sortie, mais j'ai toujours un fichier vide
Hors ligne
Salut Kenrio,
comment savoir cela?
Hors ligne
1 est un code d'erreur. Manque toujours le message comme je vous l'avais demandé ci-dessus. Ça demande seulement un $lignes = system(...) suivi d'un echo $lignes.
Guillaume.
Hors ligne
Salut Gleu,
voici la derniere modif
<?PHP
chdir("c:\Program files\PostgreSQL\9.0\bin");
$message = system('pg_dump --host 127.0.0.1 --port 5432 -U postgres --no-password --format custom -f C:\projet_conception_bd\3_livrables\sauvegardes\backupDB_wind_19.backup db_pk_v4', $retour);
if(!$retour) echo 'l\'execution s\'est mal passe';
else echo $retour;
echo '<br>'.$message;
?>
mais il n'y rien afficher pour le message de retour $message.
Hors ligne
Pouvez-vous rediriger la sortie d'erreur de pg_dump vers un fichier texte ?
Julien.
https://rjuju.github.io/
Hors ligne
en plus de la demande de Gleu, je me demande si la réponse se trouve pas dans vos fichiers de logs de votre serveur web, moi je le verrais dans mon apache.
Hors ligne
oui, c'est vrai,le fichier log d'appache, on a
pg_dump: [archiver (db)] connection to database "db_pk_v4" failed: fe_sendauth: no password supplied
je vais ajoute le mot de passe pour voir
Hors ligne
moi je créerais un utilisateur qui a les droits de backups avec un password à ça je modifie mon pg_hba pour qu'il ai les bons droit et pas plus.
Dernière modification par kenrio (14/10/2011 16:00:12)
Hors ligne
Un fichier pgpass.conf serait bien mieux.
Guillaume.
Hors ligne
ca semble marcher avec pg_hba mais sans creer d'utilisateur,
j'ai modifié la ligne
host all all 127.0.0.1/32 md5
par
# IPv4 local connections:
host all all 127.0.0.1/32 trust
puis redmarer le serveur.
mon backup est creer comme souhaité, mais je crains une faille de securite et aussi j'ai un message d'erreur
------------------
l'execution s'est mal passe
Warning: main() [function.main]: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'America/New_York' for '-4.0/DST' instead in C:\Program Files (x86)\PostgreSQL\EnterpriseDB-ApachePhp\apache\www\tests\backup4.php on line 7
Fatal error: Call to undefined function write_file() in C:\Program Files (x86)\PostgreSQL\EnterpriseDB-ApachePhp\apache\www\tests\backup4.php on line 7
----------------
le message "l'execution s'est mal passe" signifie la variable $retour n'a pas ete cree. je ne sais pas pourquoi
voici mon nouveau code
--------
<?PHP
$my_file = 'C:\projet_conception_bd\3_livrables\sauvegardes\fichier_message.txt';
$fp = fopen($my_file, "wb");
chdir("c:\Program files\PostgreSQL\9.0\bin");
$message = system('pg_dump --host 127.0.0.1 --port 5432 -U postgres --format custom -f C:\projet_conception_bd\3_livrables\sauvegardes\backupDB_wind_22.backup db_pk_v4', $retour);
if(!$retour) echo 'l\'execution s\'est mal passe';
write_file($my_file, $message);
?>
Hors ligne
Là, ce n'est plus un problème avec PostgreSQL, mais un problème avec PHP.
Je tiens quand même à dire que positionner la méthode à trust, cela revient à autoriser toute connexion sans vérification de mot de passe. Donc, oui, c'est un gros problème de sécurité. Vous devez vous assurer que seul vous pouvez accéder à votre système.
Guillaume.
Hors ligne
Desole pour la valeur de retour, je pense que ca retourne 0, donc c'est correcte.
donc, mon probleme est mainteant d'ordre securutaire.
Hors ligne
ok, je vais voir du cote de pgpass.conf comme vous aviez souhaité.
Merci a vous Gleu, kenrio, rjuru
Hors ligne
Bonjour,
Je rencontre le même problème. Pour ma part, je ne pense pas que le problème vienne du code php.
J'ai supprimé le fichier pgpass.conf.
Ouvert les possibilités de connexion via pg_hba.conf.
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
Avec ces entrées, cela fonctionne. Par contre, pour les connexions IPv6, si je mets "md5" ou "password" ou que je désactive l'entrée, cela ne fonctionne plus.
On dirait que c'est la partie IPv6 qui prime ???
ps : Ces entrées avec la méthode md5 ou password et un fichier pgpass.conf ne fonctionne pas !!
Dernière modification par jonathan1 (25/10/2011 11:32:56)
Hors ligne
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trustAvec ces entrées, cela fonctionne. Par contre, pour les connexions IPv6, si je mets "md5" ou "password" ou que je désactive l'entrée, cela ne fonctionne plus.
On dirait que c'est la partie IPv6 qui prime ???ps : Ces entrées avec la méthode md5 ou password et un fichier pgpass.conf ne fonctionne pas !!
Qu'avez-vous comme entrée pour les connexions locales ?
Quelle est votre chaine de connexion ?
Stéphane Schildknecht
Conseil, formations et support PostgreSQL
http://www.loxodata.com
Hors ligne
Bonjour,
Merci pour la réponse, je n'ai pas d'entrée qui commence par "local" dans mon pg_hba.conf. La doc indique que c'est utile pour les connexions de "socket du domaine unix" je suis pas certain de la définition de ca, mais je pense que je suis dans le cas d'une connexion tcp/ip. En outre, je suis dans un environnement windows.
Je vais faire des tests malgré tout.
Qu'entendez vous par chaine de connexion (pg_connect... ou les options de pg_dump) ?
Merci.
# IPv4 local connections:
host all all 127.0.0.1/32 password
# IPv6 local connections:
host all all ::1/128 password
local postgis all password
Avec ces entrées, marche pas.
Dernière modification par jonathan1 (25/10/2011 14:07:23)
Hors ligne
On dirait que c'est la partie IPv6 qui prime ???
Tout dépend du système d'exploitation. D'ailleurs si vous utilisez 127.0.0.1, vous verrez qu'il utilise IPv4. Simplement, localhost doit être configuré pour renvoyer une adresse IPv6 (au niveau système d'exploitation).
Avec ces entrées, marche pas.
Comment voulez-vous qu'on vous aide avec ce type d'informations ? qu'est-ce que vous entendez pas "ne marche pas" ? que se passe-t-il ? quand vous faites quoi d'ailleurs ? bref, des détails, s'il vous plait.
Guillaume.
Hors ligne