Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
je voudrais mettre à jour un champ avec des retour chariot/nouvelle ligne.
J'ai essayé plusieurs syntaxes sans succès .
Mon dernier essai :
fictmp := '<?xml version="1.0" encoding="UTF-8"?>'||E'\r\n'||'<biens>'||E'\r\n';
Rien n'y fait, il me met la chaine \r\n dans le champ au lieu de l'interpréter.
Question de débutant, je suppose, mais qui aurait la solution ?
Merci d'avance pour votre aide
Hors ligne
J'ai oublié de préciser que je suis en PostgreSQL 9.1.4 sous Ubuntu server 12.04 .
Hors ligne
Bonsoir,
dans quelle langage programmez vous ?
Personnellement en postgresql 9.1.4 avec pgAdmin faire un select E'a\r\nz' me renvoie bien le retour chariot. Vérifiez que votre type de donnée pour la variable fictmp peut bien stocker ce genre de caractère, vérifiez sinon avec psql ou pgAdmin que cela ne vient pas de votre configuration serveur.
A noter également que la fin de ligne \r\n est le format windows, sous linux il ne faut mettre qu'un \n.
Julien.
https://rjuju.github.io/
Hors ligne
En pl/PgSQL. C'est bien le bon forum ?
Hors ligne
J'ai remplacé les \r\n par des \n . Maintenant , l'affichage est bon dans psql, mais quand je fais :
copy (select fichier_contenu from diffusion_envoi) to '/users/alex/public/tst.xml';
Le champ fichier_contenu contient toujours des chaines \n et pas de line feed .
Dernière modification par MitsuTomoe (22/06/2012 00:25:53)
Hors ligne
Personne n'a une piste ? Dans le pire des cas, je ferai un sed, awk ou qq chose comme ça mais il y a sûrement moyen de mettre des lf dans un champ ???????
Hors ligne
Les codes \r et \n sont correctement interprétés par PostgreSQL. Montrer un code permettrait de tester de notre côté. Sans ça, nous ne pouvons pas vous dire grand-chose de plus.
Guillaume.
Hors ligne
La fonction complète fait plus de 500 lignes. Le principe : extraction d'une base pg pour au final créer un fichier xml .
Mon approche : une fonction pl/PgSQL qui crée un enregistrement dans une table + un script crontab qui va extraire tous les jours ce qui n'a pas été traité pour créer le fichier.
La table :
CREATE TABLE diffusion_envoi (
id_envoi integer NOT NULL,
id_diffusion integer NOT NULL,
id_agence integer NOT NULL,
dat_enreg timestamp without time zone NOT NULL,
dat_envoi timestamp without time zone NOT NULL,
nb_annonce integer NOT NULL,
fichier_nom character varying(255) NOT NULL,
fichier_contenu text NOT NULL,
dat_creat timestamp without time zone,
dat_tran timestamp without time zone,
user_db_creat character varying(40),
user_db_tran character varying(40),
user_intranet_creat character varying(40),
user_intranet_tran character varying(40)
);
Extraits choisis du code :
fictmp varchar;
...
fictmp := '<?xml version="1.0" encoding="UTF-8"?>'|| E'\n';
fictmp := fictmp||'<biens>'|| E'\n';
...
footer := '</biens>'|| E'\n';
fictmp := fictmp||footer;
fichier := fictmp;
...
INSERT INTO diffusion_envoi VALUES(default,p_diffuseur,p_agence,now(),null,totdiff,vnomfic,fichier) RETURNING currval('diffusion_envoi_id_envoi_seq') into videnvoi;
Tout se passe bien, un select me montre fichier_contenu bien présenté.
Ensuite , je fais dans psql : COPY (select fichier_contenu from diffusion_envoi where ....) to '/bidule/machin/tst.xml';
Le fichier obtenu contient des chaînes \n et non pas des line feed ou retour chariot.
Voila, je fais certainement une erreur grossière quelque part ?
Hors ligne
J'ai aussi fait un essai en mettant chr(10) et/ou chr(13) dans le champ sans plus de succès.
Hors ligne
Oui, c'est normal. Dans le contenu d'un COPY, vous avez une ligne du fichier par ligne de la table. Donc les retours chariots sont codés avec des \n. Rien que du normal.
Guillaume.
Hors ligne
Je tiens à préciser... "Dans le contenu d'un COPY par défaut...". Vous n'aurez pas le même comportement avec un COPY au format CSV.
Guillaume.
Hors ligne
Vous avez bien compris que je veux juste extraire un champ texte d'une seule ligne de la table dans un fichier ?
Hors ligne
Edit : j'avais lu et répondu trop vite . Ca marche en lui faisant croire que c'est du csv !
Je vous remercie beaucoup pour votre aide, je n'aurais jamais pensé à ça .
P.S. : comment mettre le fil résolu ?
Hors ligne
Il n'y a pas moyen de le passer en résolu et ça n'est pas dérangeant en fait.
Guillaume.
Hors ligne
Pages : 1