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 18/10/2012 10:53:29

laura
Membre

Problème d'encodage avec commande COPY

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

#2 18/10/2012 11:52:49

rjuju
Administrateur

Re : Problème d'encodage avec commande COPY

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';

Hors ligne

#3 18/10/2012 12:20:16

laura
Membre

Re : Problème d'encodage avec commande COPY

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

#4 18/10/2012 13:07:14

rjuju
Administrateur

Re : Problème d'encodage avec commande COPY

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.

Hors ligne

#5 18/10/2012 13:46:27

laura
Membre

Re : Problème d'encodage avec commande COPY

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

#6 19/10/2012 08:33:49

laura
Membre

Re : Problème d'encodage avec commande COPY

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

Pied de page des forums