IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration PostgreSQL Discussion :

Comment importer données dans base en LATIN1


Sujet :

Administration PostgreSQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 48
    Points : 33
    Points
    33
    Par défaut Comment importer données dans base en LATIN1
    Bonjour à tous,

    j'administre une base de données postgreSQL dont l'encodage est en Latin1.
    J'aimerais importer des données en format CSV.
    Mon problème est que mon import plante car ma base de données est encodée en Latin1.

    le message d'erreur est le suivant:

    ERROR: invalid byte sequence for encoding "UTF8": 0xe92064
    État SQL :22021
    Astuce : This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding".
    Contexte : COPY perval_filtre, line 2

    J'ai essayé d'encoder mon fichier en UFT8 mais ça ne marche pas:

    ERROR: character 0xefbbbf of encoding "UTF8" has no equivalent in "LATIN1"
    État SQL :22P05
    Contexte : COPY perval_filtre, line 1
    J'ai lu que je pouvais changer l'encodage de ma base de données seulement ce n'est pas moi qui l'ai créée et j'ai quelques réticences à me lancer là dedans.
    Je voudrais donc changer l'encodage de mes données en LATIN1, comment puis je faire?
    J'utilise notepad ++ et Excel pour manipuler mes données.

    Merci de vos réponses.

    mat_elot

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Citation Envoyé par mat_elot Voir le message
    J'ai essayé d'encoder mon fichier en UFT8 mais ça ne marche pas:

    ERROR: character 0xefbbbf of encoding "UTF8" has no equivalent in "LATIN1"
    Ces 3 octets sont un BOM (voir http://fr.wikipedia.org/wiki/Marque_...odages_unicode)
    dûs au format de sauvegarde.

    Dans les encodages proposés par Notepad++, il y a "Convertir en UTF-8 (sans BOM)", c'est celui-là qu'il faut choisir pour avoir un fichier UTF-8 utilisable directement par le COPY de postgresql.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 48
    Points : 33
    Points
    33
    Par défaut
    Merci de ta réponse estofilo,

    Dans les encodages proposés par Notepad++, il y a "Convertir en UTF-8 (sans BOM)", c'est celui-là qu'il faut choisir pour avoir un fichier UTF-8 utilisable directement par le COPY de postgresql.
    Je n'arrive pas à garder l'encodage en UTF-8 (sans BOM), quand je le converti alors qu'il est seulement en ANSI, que je ferme le fichier et que je le ré-ouvre, je ne le retrouve pas en UTF-8 (sans BOM).
    Et en essayant de l'importer sans l'ouvrir, ca me met le même message d'erreur (1er cité).

    Merci

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Je n'arrive pas à garder l'encodage en UTF-8 (sans BOM), quand je le converti alors qu'il est seulement en ANSI, que je ferme le fichier et que je le ré-ouvre, je ne le retrouve pas en UTF-8 (sans BOM).
    Ca fonctionne pour moi. A partir d'un fichier ANSI:
    1) Fichier>Ouvrir
    2) aller dans le menu Encodage. normalement "Encoder en ANSI" est coché
    3) Lancer Encodage>Convertir en UTF-8 (sans BOM)
    4) sauver le fichier sous un nom différent Fichier>Enregistrer sous
    5) Fichier>Fermer
    6) Fichier>Ouvrir pour recharger le nouveau fichier
    7) Aller dans Encodage. On doit voir "Encoder en UTF-8 (sans BOM)" qui est coché

    Comme la détection automatique d'un encodage de caractères n'est pas fiable à 100%, il se peut que l'étape 7 ne soit pas OK, ce n'est pas grave.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 48
    Points : 33
    Points
    33
    Par défaut
    Merci de ta réponse estofilo.

    je n'y arrive toujours pas.
    Je n'ai pas de menu encodage par contre avec ma version....du moins je ne la trouve pas.
    J'ai un onglet "format", est bien cela dont tu parles?

    Merci!

  6. #6
    Membre expérimenté Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Points : 1 734
    Points
    1 734
    Par défaut
    Essaye juste, sans passer par notepad++ ou autre éditeur de texte, de créer un script SQL dans lequel tu mettrais la commande "SET CLIENT_ENCODING TO 'LATIN1';" puis ensuite ta commande COPY
    Puis exécute ton script SQL
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 48
    Points : 33
    Points
    33
    Par défaut
    Merci scheu!

    Par contre je suis pas sur de comprendre ce qu'il faut que je fasse
    J'ai testé de faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    COPY ma_table_ref from 'chemin/ma_table_corresp.csv' 
    WITH DELIMITER AS ';' CSV SET CLIENT_ENCODING from 'LATIN1';
    puis


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SET CLIENT_ENCODING from 'LATIN1'; COPY ma_table_ref 
    from 'chemin/ma_table_corresp.csv' WITH DELIMITER AS ';' CSV ;

    puis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SET CLIENT_ENCODING from 'LATIN1' COPY ma_table_ref 
    from 'chemin/ma_table_corresp.csv' WITH DELIMITER AS ';' CSV ;
    ..tout dans la meme requete donc... mais apparemment ca n'est pas ca!
    Du coup je me demande si j'ai bien saisi le sens du mot "script".

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    SET est une commande à part entière complètement indépendante de COPY.
    En l'occurrence ici le conseil de scheu est de faire d'abord SET et ensuite COPY puisque l'objet du SET est d'influer sur la manière dont COPY va interpréter les données.
    Un script est un ensemble de commandes regroupées dans un même fichier

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Citation Envoyé par mat_elot Voir le message
    Merci de ta réponse estofilo.

    je n'y arrive toujours pas.
    Je n'ai pas de menu encodage par contre avec ma version....du moins je ne la trouve pas.
    J'ai un onglet "format", est bien cela dont tu parles?

    Merci!
    Non c'est bien un menu Encodage. Copie d'écran en pièce jointe!
    Notepad++ 5.6.7
    Images attachées Images attachées  

  10. #10
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 48
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par estofilo Voir le message
    Non c'est bien un menu Encodage. Copie d'écran en pièce jointe!
    Notepad++ 5.6.7
    je vais tenter avec une version plus récente que la mienne alors.

    Citation Envoyé par estofilo Voir le message
    SET est une commande à part entière complètement indépendante de COPY.
    Ce qui revient à ma seconde tentative.

    Citation Envoyé par estofilo Voir le message
    En l'occurrence ici le conseil de scheu est de faire d'abord SET et ensuite COPY puisque l'objet du SET est d'influer sur la manière dont COPY va interpréter les données.
    Un script est un ensemble de commandes regroupées dans un même fichier
    Ce qui revient à ma première tentative.

    Non?
    Comment créer un script à part en lançant plusieurs requête sous pg admin?
    Y a pas de question con je sais mais la je suis apparemment légèrement paumé
    Merci de votre aide!

  11. #11
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 48
    Points : 33
    Points
    33
    Par défaut
    J'ai testé avec notepad++ 5.6.8 et j'y suis arrivé sur un extrait de mon fichier.
    Seulement quand j'essaie d'importer mon fichier en entier, il me bloque sur une ligne

    ERROR: character 0xcb86 of encoding "UTF8" has no equivalent in "LATIN1"
    État SQL :22P05
    Contexte : COPY perval_filtre, line 11942
    Je vais à la ligne 11942 de mon fichier et ne trouve aucun caractère que je ne trouve dans les lignes précédentes de mon fichier.

  12. #12
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    ERROR: character 0xcb86 of encoding "UTF8" has no equivalent in "LATIN1"
    État SQL :22P05
    Contexte : COPY perval_filtre, line 11942
    C'est un accent circonflexe:
    http://www.fileformat.info/info/unic...02c6/index.htm
    qui est présent dans le jeu de caractères win-1252 mais pas en iso-latin1

  13. #13
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 48
    Points : 33
    Points
    33
    Par défaut
    Yeah!!! c'est good!
    Je l'avais pas vu avec tous mes points virgules!
    Merci pour le lien et pour tout le reste estofilo, ainsi qu'à toi scheu.

    Pour conclure j'ai fait avec l'éditeur de texte, ca à tres bien marché du coup
    Merci pour ta méthode aussi scheu me manque plus qu'à poster une autre discussion.... cette fois sur les script!

    Merci à vous!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 29/07/2011, 10h55
  2. Copier les données dans base externe
    Par bozolozo dans le forum Access
    Réponses: 2
    Dernier message: 10/05/2006, 09h56
  3. methodologie pour Supprimer données dans base de données
    Par elkhy dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 26/04/2006, 18h30
  4. insertion de données dans Base de données Oracle 9
    Par hottnikks_79 dans le forum SQL
    Réponses: 2
    Dernier message: 16/03/2006, 00h07
  5. [ADO.Net][VB.NET/C#]Comment importer .xls dans DataSet ?
    Par smedini dans le forum Accès aux données
    Réponses: 2
    Dernier message: 10/01/2006, 15h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo