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 25/01/2010 15:21:27

glenn
Membre

Retour à la ligne RAISE INFO 'bla bla'

Bonjour,

   Question bête ! Comment revenir à la ligne dans un message levé par  RAISE ?

J'ai essayé  :

CREATE OR REPLACE FUNCTION diff_tm_structure() RETURNS void AS $$

DECLARE
BEGIN
	RAISE INFO 'première ligne\n';
	RAISE INFO 'seconde ligne\n';
END;
$$ LANGUAGE plpgsql;

... mais toujours pas de retour à la ligne !

Merci par avance de votre aide !

Note : je suis en version 1.8.4.


J'ai vu le post sur le même sujetle post sur le même sujet mais la solution

RAISE INFO 'première ligne\n.';

si elle marche n'est pas satisfaisante car elle parasite la ligne suivante avec un caractère !

Glenn.

Dernière modification par glenn (25/01/2010 15:33:18)

Hors ligne

#2 25/01/2010 15:33:03

Marc Cousin
Membre

Re : Retour à la ligne RAISE INFO 'bla bla'

Ici ça marche, avec exactement votre code.
Par contre je présume que la version, c'est 8.4.1 ?


Marc.

Hors ligne

#3 25/01/2010 15:34:40

glenn
Membre

Re : Retour à la ligne RAISE INFO 'bla bla'

Oups ! la version est 8.3.5 !

Hors ligne

#4 25/01/2010 15:44:40

Marc Cousin
Membre

Re : Retour à la ligne RAISE INFO 'bla bla'

Essayez tout de même de remplacer 'première ligne\n' par E'première ligne\n', ceci précise à postgresql que la chaine entre parenthèses est une chaine définie avec la syntaxe d'escape C, et non la syntaxe SQL


Marc.

Hors ligne

#5 25/01/2010 15:47:15

glenn
Membre

Re : Retour à la ligne RAISE INFO 'bla bla'

ça ne marche pas non plus avec E...

Hors ligne

#6 25/01/2010 15:58:14

Marc Cousin
Membre

Re : Retour à la ligne RAISE INFO 'bla bla'

Ici ça marche :

test=# SET client_min_messages TO debug;
SET                       
test=# CREATE OR REPLACE FUNCTION diff_tm_structure() RETURNS void AS $$
DECLARE
BEGIN
    RAISE INFO 'première ligne\n';
    RAISE INFO 'seconde ligne\n';
END;
$$ LANGUAGE plpgsql;
WARNING:  nonstandard use of escape in a string literal
HINT:  Use the escape string syntax for escapes, e.g., E'\r\n'.
CONTEXT:  string literal in PL/PgSQL function "diff_tm_structure" near line 3
WARNING:  nonstandard use of escape in a string literal
HINT:  Use the escape string syntax for escapes, e.g., E'\r\n'.
CONTEXT:  string literal in PL/PgSQL function "diff_tm_structure" near line 4
CREATE FUNCTION
test=# SELECT diff_tm_structure();
INFO:  première ligne

INFO:  seconde ligne

 diff_tm_structure
-------------------

Je suis en 8.4.2, et je n'ai pas de 8.3 sous la main pour tester pour le moment. Vous n'avez pas le même résultat ?


Marc.

Hors ligne

#7 25/01/2010 16:02:18

glenn
Membre

Re : Retour à la ligne RAISE INFO 'bla bla'

Non plus...

Merci bien pour ton aide. C'est sûrement dû à ma version... Je vais upgrader.

Hors ligne

#8 25/01/2010 16:43:08

gleu
Administrateur

Re : Retour à la ligne RAISE INFO 'bla bla'

Je ne vois pas où vous avez lu qu'il fallait un point supplémentaire pour que cela fonctionne. En fait, il vous faut remplacer le \n par un chr(10). Vous devez concaténer les chaînes mais RAISE utilise un moyen spécial pour cela (à la sprintf en C) :

a=# select version();
                                         version                                          
------------------------------------------------------------------------------------------
 PostgreSQL 8.3.9 on i686-pc-linux-gnu, compiled by GCC gcc (Ubuntu 4.4.1-4ubuntu8) 4.4.1
(1 ligne)

a=# select diff_tm_structure();
INFO:  première lignen
INFO:  seconde lignen
 diff_tm_structure 
-------------------
 
(1 ligne)

a=# CREATE OR REPLACE FUNCTION diff_tm_structure() RETURNS void AS $$
DECLARE
BEGIN
    RAISE INFO 'première ligne%', chr(10);
    RAISE INFO 'seconde ligne%', chr(10);
END;
$$ LANGUAGE plpgsql;
CREATE FUNCTION
a=# select diff_tm_structure();
INFO:  première ligne

INFO:  seconde ligne

 diff_tm_structure 
-------------------
 
(1 ligne)

Guillaume.

Hors ligne

#9 25/01/2010 16:45:50

glenn
Membre

Re : Retour à la ligne RAISE INFO 'bla bla'

Ce n'est pas un "." en particulier qu'il faut mais un caractère, n'importe lequel après le \n...

J'ai testé ton exemple avec  char(10), ça ne marche pas.

Hors ligne

Pied de page des forums