Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/03/2007, 10h50   #1
Invité de passage
 
Inscription : mars 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 6
Points : 0
Points : 0
Par défaut commande pour insérer une table dans un fichier

Bonjour à tous,
Voilà mon problème j'aimerai copier une table dans un fichier. Avec MySql la commande de base est :

Citation:
select [colonnes] into outfile [repertoire/nom_fichier] fields terminatede by ';' from [nom_table] where [condition]
Ma question est la suivante : Sous postgres, quelle est la commande équivalente sous postgres ???
mix_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2007, 11h09   #2
Invité de passage
 
Inscription : mars 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 6
Points : 0
Points : 0
Bon j'ai trouvé ceci mais j'ai un message d'erreur
est-ce que la commande est correcte ou est-ce juste une erreur de synthaxe
Code :
1
2
3
 
COPY (SELECT * FROM edw_object_1_ref_tmp WHERE date='20070313') TO '/home/cb21101_gsm20101_dev/upload/table_tmp.txt';
Warning: PostgreSQL query failed: ERROR: syntax error at OR near "(" at character 6 IN
mix_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2007, 11h11   #3
Expert Confirmé
 
Homme
Inscription : septembre 2006
Messages : 2 291
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2006
Messages : 2 291
Points : 2 739
Points : 2 739
Citation:
Envoyé par mix_35
Bonjour à tous,
Voilà mon problème j'aimerai copier une table dans un fichier. Avec MySql la commande de base est :



Ma question est la suivante : Sous postgres, quelle est la commande équivalente sous postgres ???
Dans psql :
Code :
1
2
 
SELECT [colones] * FROM [nom_table] WHERE [condition] [GROUP BYORDER BY] \g filename
pour concaténer à un fichier existant :

Code :
1
2
 
SELECT [colones] * FROM [nom_table] WHERE [condition] [GROUP BYORDER BY] \g|cat >> /absolute/path/filename
dans un terminal :
Code :
1
2
 
echo 'query' | psql [options] DATABASE >> /absolute/path/filename
JeitEmgie est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2007, 11h19   #4
Membre actif
 
Inscription : novembre 2006
Messages : 194
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 194
Points : 197
Points : 197
pour ce qui est de l'erreur de ( dans le copy, c'est une instruction valide à partir de la version 8.2.
pour les versions antérieurs, on ne peut utiliser copy qu'avec une table en indiquant éventuellement les colonnes.
coca25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2007, 11h29   #5
Invité de passage
 
Inscription : mars 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 6
Points : 0
Points : 0
dans ma page php j'ai remplacé mon code par ça :

Code :
exec("/.../psql SELECT * FROM ".$this->object_ref." WHERE date='".$this->day."' \g '".$file_tmp."'");
La table n'est pas copiée dans le fichier
mix_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2007, 11h42   #6
Invité de passage
 
Inscription : mars 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 6
Points : 0
Points : 0
et peut-on rajouter une conidtion where dans le copy pour une table donnée pour les versions antérieures à la 8.2
mix_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2007, 14h08   #7
Expert Confirmé
 
Homme
Inscription : septembre 2006
Messages : 2 291
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2006
Messages : 2 291
Points : 2 739
Points : 2 739
Citation:
Envoyé par mix_35
dans ma page php j'ai remplacé mon code par ça :

Code :
exec("/.../psql SELECT * FROM ".$this->object_ref." WHERE date='".$this->day."' \g '".$file_tmp."'");
La table n'est pas copiée dans le fichier
normal :

\g est transformé par PHP en g (g escaped == g)
il faut préserver le \ en le doublant… \\g

(vous pouvez aussi mettre le query dans un scrip shell et lancer l'exec de celui-ci dans PHP en passant les arguments au script…)

n'oubliez pas que pour générer le fichier celui qui exécute le code doit avoir les droits d'accès au directory dans lequel vous voulez écrire le fichier :

si vous utilisez COPY c'est le daemon postgres qui doit avoir accès à ce dossier,
si vous faites l'export côté PHP c'est le web server qui doit y avoir accès
si vous faites l'export dans un script shell c'est le owner du script… (chown…)
JeitEmgie est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2007, 20h22   #8
Membre actif
 
Inscription : novembre 2006
Messages : 194
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 194
Points : 197
Points : 197
Citation:
Envoyé par mix_35
dans ma page php j'ai remplacé mon code par ça :

Code :
exec("/.../psql SELECT * FROM ".$this->object_ref." WHERE date='".$this->day."' \g '".$file_tmp."'");
La table n'est pas copiée dans le fichier
la requete est en fait envoye en tant qu'argument à la commande psql, ce qui ne marche pas, il faut l'envoyer en tant qu'entrée standard:
Code :
1
2
 
echo requete | psql base > fichier
pour ce qui est de copy, on ne peut mettre une condition avant 8.2, par contre on peut créer une table temporaire regroupant les enregistrements de la requete et ensuite la copier avec copy dans un fichier
coca25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h11.


 
 
 
 
Partenaires

Hébergement Web