Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 30/05/2012 10:15:12
- brse
- Membre
Erreur dans la log
Bonjour,
J'exécute une commande psql depuis un script windows comme ceci :
psql -h localhost -p 5432 -d brse -U postgres -f "ma_requete.sql" -o ma_log.log
Mon problème : sur l'invite de commande, ça m'affiche toutes les requetes qui ne passent pas et l'erreur alors que sur mon fichier de log j'ai l'inverse (que celle qui passe).
Par exemple pour un insert, dans la log j'aurais "insert" (si il passe) par contre si j'ai un problème j'aurais sur l'invite de commande l'erreur et rien en log.
Est-il possible de mettre dans le fichier log tout ce qui s'affiche sur mon invite de commande (erreur, warning, infos, ....) ?
J'ai essayé de combiner avec le paramètre -a, -L, ... mais ça ne change rien pour mon fichier log.
Merci
Hors ligne
#2 30/05/2012 10:33:07
- rjuju
- Administrateur
Re : Erreur dans la log
Bonjour,
l'option -o ne redirige pas les erreurs
Vous pouvez essayer
psql -h localhost -p 5432 -d brse -U postgres -f "ma_requete.sql" 1> ma_log.log 2>&1
pour rediriger la sortie standard et sortie d'erreur vers votre fichier de log.
Julien.
https://rjuju.github.io/
Hors ligne
#3 30/05/2012 10:57:25
- brse
- Membre
Re : Erreur dans la log
Merci ça fonctionne pour la commande psql.
En complément, est-il possible de faire la même chose dans un script sql (parfois dans mon script je change de log avec \o) ?
Hors ligne
#4 30/05/2012 11:04:06
- rjuju
- Administrateur
Re : Erreur dans la log
Hélas non, la commande \o ne redirigeant pas les erreurs :
\o [ {nomfichier | |commande} ]
Sauvegarde les résultats des requêtes suivantes dans le fichier nomfichier ou envoie via un tube les résultats à venir dans un shell Unix séparé pour exécuter command. Si aucun argument n'est spécifié, l'affichage de la requête est redirigé vers la sortie standard.
Les « résultats de requête » incluent toutes les tables, réponses de commande et messages d'avertissement obtenus du serveur de bases de données, ainsi que la sortie de différentes commandes antislash qui envoient des requêtes à la base de données (comme \d), mais sans message d'erreur.
Julien.
https://rjuju.github.io/
Hors ligne
#5 30/05/2012 15:24:54
- brse
- Membre
Re : Erreur dans la log
Je reviens vers vous car j'ai une nouvelle erreur lié à celle-ci.
En redirigeant la sortie comme indiqué ci-dessus la log est correcte cependant j'ai cette erreur qui apparait :
psql:D:/.../mon_script.sql:36: ERREUR: séquence d'octets invalide pour l'encodage « UTF8 » : 0xe76169
A chaque fois que j'essaie d'insérer des caractères spéciaux dans ma base UTF8, j'obtiens l'erreur.
Sans la redirection de la log, les requêtes fonctionnent.
J'ai essayer de mettre SET client_encoding = 'UTF8'; dans mes fichiers SQL (http://www.developpez.net/forums/d60930 … ding-utf8/) mais cela ne change rien.
J'ai également essayer de mettre chcp 1252 avant de faire le psql (http://forums.postgresql.fr/viewtopic.php?id=986) mais aucun changement.
Avez-vous une solution pour ce problème sans modifier l'encodage de ma base (je suis obligé d'utiliser UTF8)
Hors ligne
#6 30/05/2012 15:30:01
- rjuju
- Administrateur
Re : Erreur dans la log
Quelle est la requête à la ligne 36 de mon_script.sql ?
Ce fichier est-il bien encodé en utf8 ?
Julien.
https://rjuju.github.io/
Hors ligne
#7 30/05/2012 15:37:44
- brse
- Membre
Re : Erreur dans la log
mon_script.sql : 36
insert into LNG values ('2', '0', 'fr', 'Français');
Ca bloque avec le caractère 'ç'
En modifiant l'encodage de mon fichier en UTF8, la requête passe mais je ne comprend pas pourquoi sans la redirection et encodage ANSI, le script passe aussi
Hors ligne
#8 30/05/2012 15:40:49
- brse
- Membre
Re : Erreur dans la log
Je précise que je génère certains script INSERT automatiquement depuis une base de données Oracle et du coup le fichiers de sortie est en ANSI (ASCII).
Dernière modification par brse (30/05/2012 15:41:58)
Hors ligne
#9 30/05/2012 15:54:27
- gleu
- Administrateur
Re : Erreur dans la log
Ça n'est certainement pas de l'ASCII si vous avez des accents et des cédilles. Un file sur le fichier permettra de savoir l'encodage réel du fichier.
$ cat toto
Français
$ file toto
toto: UTF-8 Unicode text
Guillaume.
Hors ligne
#10 30/05/2012 15:58:35
- rjuju
- Administrateur
Re : Erreur dans la log
Je crois qu'il est sous windows, et à ma connaissance il n'y a pas d'équivalent à file
Julien.
https://rjuju.github.io/
Hors ligne
#11 30/05/2012 16:04:13
- brse
- Membre
Re : Erreur dans la log
Je suis sous windows et je ne connais pas la commande pour connaitre l'encodage du fichier.
Notepad++ me dit qu'il est en ANSI
Eclipse me dit en Cp1252
Hors ligne
#12 30/05/2012 16:43:10
- gleu
- Administrateur
Re : Erreur dans la log
Donc c'est du code page 1252 windows. Pas sûr que chaque caractère se convertisse facilement en UTF8. Est-il possible d'avoir ce fichier pour tester ?
Guillaume.
Hors ligne
#13 30/05/2012 17:14:35
- brse
- Membre
Re : Erreur dans la log
Je vous ai envoyé un mail avec ce qu'il fallait pour faire passer le script.
Merci pour votre implication
Hors ligne
#14 30/05/2012 17:43:13
- gleu
- Administrateur
Re : Erreur dans la log
Le fichier est en latin1 (ou iso8859-1). Ajouter "SET client_encoding TO latin1;" en début de fichier résout le problème (en tout cas pour moi).
Guillaume.
Hors ligne
#15 30/05/2012 17:45:28
- brse
- Membre
Re : Erreur dans la log
Le problème c'est que je suis obligé d'utiliser l'UTF8, j'ai montré le cas avec un accents mais je suis susceptible d'avoir d'autre cas de caractère qui ne peuvent pas être encoder en latin1 ou ISO.
Hors ligne
Pages : 1