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

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.

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 ?

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 hmm

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

Pied de page des forums