Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
Je débute avec PostgreSQL...
Je souhaite réaliser un export en csv de deux tables. J'utilise pour cela la commande COPY. Jusque la tout va bien.
Le problème est que lorsque j'ouvre le csv créé j'ai un problème d'accent et de caractères spéciaux... Je ne sais pas comment faire pour modifier l'encodage (je pense que cela vient de la).
J'ai cru comprendre qu'il fallait ajouter l'option encoding dans la commande copy (with csv header encoding ''LATIN2'') mais j'obtiens systématiquement une erreur de syntaxe . De plus je ne sais pas quel encodage choisir pour que cela fonctionne...
Je vous remercie par avance pour votre aide
Dernière modification par laura (18/10/2012 10:53:48)
Hors ligne
Bonjour,
quel est l'encodage de votre base de donnée ?
La syntaxe pour le copy est la suivante: COPY nom_table TO '/chemin/fichier.csv' WITH csv DELIMITER ';' ENCODING 'LATIN2';
Julien.
https://rjuju.github.io/
Hors ligne
Ma base de données est en UTF8 et j'utilise la version 8.4 de PostgreSQL
Je pense que j'ai aussi un problème de cote, je ne doit pas les placer au bon endroit...
Voici la function que je souhaite mettre en place. Elle fonctionne correctement sans le encoding :
create or replace function export_hydrant () returns void as
$body$
declare
id_carto text;
commune text;
ciecommune text;
begin
for id_carto in execute 'select distinct id_carto from sig_commune ' --récupère l'id_carto de toutes les communes de la table sig_commune
loop
for commune in execute 'select distinct commune_simple from sig_commune where id_carto = ' || id_carto --récupère le nom de la commune pour l'id_carto trouvé
loop
for ciecommune in execute 'select distinct compagnie||commune_simple from sig_commune where id_carto = ' || id_carto -- récupère, pour cet id_carto, la concaténation du champ compagnie avec le champ commune simple, cela permettra de donné un nom au fichier csv)
loop
raise log '%', id_carto;
execute 'copy (select id_carto,sous_type,annee_dernier_controle,observation,debit_max_en_m3h,commune,complement_adresse,num_hydrant,pression_statique,num_voie,type_voie,excipient_voie,libelle_voie,num_tournee,debit_1bar,pression_dynamique_60m3h,num_ordre_tournee,domaine,num_folio,NULL as capacite_txt from sig_hydrant_pression where commune = ''' || commune || '''
union all
select id_carto,sous_type,annee_dernier_controle,observation, NULL as debit_max_en_m3h,commune,complement_adresse,num_hydrant,NULL as pression_statique,num_voie,type_voie,excipient_voie,libelle_voie,num_tournee,NULL as debit_1bar,NULL as pression_dynamique_60m3h,num_ordre_tournee,domaine,num_folio,capacite_txt from sig_hydrant_aspiration where commune = ''' || commune || ''')' -- requête qui permet de récupérer tous les hydrants d'une commune
|| ' to ''/ExportPostgre/' || ciecommune ||'.csv'' ' -- crée un fichier csv pour chaque commune
|| 'with csv header DELIMITER '' '' '; -- le séparateur entre les colonne est une tabulation
end loop;
end loop;
end loop;
end;
$body$
LANGUAGE 'plpgsql' VOLATILE;
Merci encore
Dernière modification par laura (18/10/2012 12:46:32)
Hors ligne
Si votre base est en utf8, le fichier généré sera aussi en utf8. Si vous faîtes le copy à la main, arrivez-vous à créer un fichier correct ? Quel éditeur utilisez-vous ? Peut-être que celui-ci ne détecte pas le bon encodage sur le fichier.
Julien.
https://rjuju.github.io/
Hors ligne
Lorsque j'exécute uniquement ma requête select et que je fais fichier/exporter, je peux choisir un type de codage et lorsque je sélectionne 'Jeu de caractère local', le résultat conserve bien mes caractères spéciaux (ce qui n'est pas le cas lorsque je sélectionne Unicode UTF-8).
Pour lire les fichiers csv créés, j'utilise Excel 2003.
Il n'y a aucun moyen de changer l'encodage?
Merci
Hors ligne
Du coup je regarde plutôt du côté d'Excel avec l'import de données externe ça fonctionne, il ne me reste plus qu'à rédiger la bonne macro pour automatiser tout ça (j'ai beaucoup de fichiers)
Merci encore pour votre aide
Hors ligne
Pages : 1