PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

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

#1 14/10/2011 14:15:17

baradji
Membre

Creation d'un dump de postgresql depuis une application web

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

#2 14/10/2011 14:23:58

gleu
Administrateur

Re : Creation d'un dump de postgresql depuis une application web

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

#3 14/10/2011 14:36:19

kenrio
Membre

Re : Creation d'un dump de postgresql depuis une application web

Votre utilisateur de session web il a le droit de lancer un pg_dump ?

Hors ligne

#4 14/10/2011 14:50:46

baradji
Membre

Re : Creation d'un dump de postgresql depuis une application web

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

#5 14/10/2011 14:52:26

baradji
Membre

Re : Creation d'un dump de postgresql depuis une application web

Salut Kenrio,
comment savoir cela?

Hors ligne

#6 14/10/2011 14:53:28

gleu
Administrateur

Re : Creation d'un dump de postgresql depuis une application web

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

#7 14/10/2011 15:03:00

baradji
Membre

Re : Creation d'un dump de postgresql depuis une application web

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

#8 14/10/2011 15:05:17

rjuju
Administrateur

Re : Creation d'un dump de postgresql depuis une application web

Pouvez-vous rediriger la sortie d'erreur de pg_dump vers un fichier texte ?

Hors ligne

#9 14/10/2011 15:05:20

kenrio
Membre

Re : Creation d'un dump de postgresql depuis une application web

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

#10 14/10/2011 15:17:44

baradji
Membre

Re : Creation d'un dump de postgresql depuis une application web

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

#11 14/10/2011 15:59:48

kenrio
Membre

Re : Creation d'un dump de postgresql depuis une application web

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

#12 14/10/2011 16:27:32

gleu
Administrateur

Re : Creation d'un dump de postgresql depuis une application web

Un fichier pgpass.conf serait bien mieux.


Guillaume.

Hors ligne

#13 14/10/2011 16:49:42

baradji
Membre

Re : Creation d'un dump de postgresql depuis une application web

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

#14 14/10/2011 16:53:40

gleu
Administrateur

Re : Creation d'un dump de postgresql depuis une application web

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

#15 14/10/2011 16:55:06

baradji
Membre

Re : Creation d'un dump de postgresql depuis une application web

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

#16 14/10/2011 16:57:40

baradji
Membre

Re : Creation d'un dump de postgresql depuis une application web

ok, je vais voir du cote de pgpass.conf comme vous aviez souhaité.
Merci a vous Gleu, kenrio, rjuru

Hors ligne

#17 25/10/2011 11:29:45

jonathan1
Membre

Re : Creation d'un dump de postgresql depuis une application web

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

#18 25/10/2011 12:17:55

SAS
Membre

Re : Creation d'un dump de postgresql depuis une application web

jonathan1 a écrit :

# 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 !!

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

#19 25/10/2011 13:48:18

jonathan1
Membre

Re : Creation d'un dump de postgresql depuis une application web

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

#20 25/10/2011 22:29:03

gleu
Administrateur

Re : Creation d'un dump de postgresql depuis une application web

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

Pied de page des forums