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

PostgreSQL Discussion :

problème d'encodage lors de la création d'une base


Sujet :

PostgreSQL

  1. #1
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut problème d'encodage lors de la création d'une base
    bonjour à tous,

    voilà, j'essaie de créer ma première base de données sous postgresql, et j'ai malheureusement obtenu une erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Erreur SQL :
     
    ERREUR:  l'encodage LATIN1 ne correspond pas à la locale fr_FR.UTF-8
    DETAIL:  Le paramètre LC_CTYPE choisi nécessite l'encodage UTF8.
     
    Dans l'instruction :
    CREATE DATABASE "BD_CITY_FRANCE" WITH ENCODING='LATIN1'
    je précise que je suis sur ubuntu 10.10. j'ai cherché des infos sur le net, on parle souvent de LC_CTYPE, cenpendant chaque fois que j'ai été voir, ils avaient tous un avis différent sur chacun des cas déjà abordés...
    j'aimerais savoir ce que je dois faire pour pouvoir encode en LATIN1 sans risquer de détériorer ma configuration svp

    merci !

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 888
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 888
    Points : 53 122
    Points
    53 122
    Billets dans le blog
    6
    Par défaut
    La collation d'une base dépend du jeu de caractères sous-jacent. Linux est en général assez pauvre en matière de jeux de caractères ce qui fait que le choix de la collation est restreint.
    Lisez ceci :
    http://www.developpez.net/forums/d77...nger-lc_ctype/

    A +

  3. #3
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    merci pour le lien, je viens de lire ce topic.

    mais la solution apportée à mon problème concerne postgresql sous windows :
    Pour ceux qui aurait des difficultés à créer une base LATIN1 sous Windows, avec PostgreSQL 8.4
    comment puis-je faire sur ubuntu ?

    je vais voir si je peux installer de nouveaux jeux de caractères.
    je crois que ça dois être possible dans la logithèque.

  4. #4
    Inactif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 245
    Points : 262
    Points
    262
    Par défaut
    Bonjour
    Au shell avant d'initialiser le moteur
    Tapez la commande en root (locale)
    vous trouverez des valeurs sur UTF8

    copiez et collez les commandes suivantes au shell

    export LANG="C"
    export LC_CTYPE="C"
    export LC_NUMERIC="C"
    export LC_TIME="C"
    export LC_COLLATE="C"
    export LC_MONETARY="C"
    export LC_MESSAGES="C"
    export LC_PAPER="C"
    export LC_NAME="C"
    export LC_ADDRESS="C"
    export LC_TELEPHONE="C"
    export LC_MEASUREMENT="C"
    export LC_IDENTIFICATION="C"
    export LC_ALL="C"

    locale pour vérifier les nouvelles valeurs

    initialiser le moteur une fois ces valeurs instruites

    (su postgres)
    initdb -D /home/mabase
    etc ....
    Cordialement

  5. #5
    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
    j'aimerais savoir ce que je dois faire pour pouvoir encode en LATIN1 sans risquer de détériorer ma configuration svp
    La solution la plus rapide, sous 8.4+
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create database truc encoding='LATIN1' lc_collate='C' lc_ctype='C' template=template0
    Cette solution est supposée fonctionner directement sans autre manipulation.

    L'inconvénient est qu'en cas de besoin d'une collation française, notamment pour trier avec les règles françaises, la locale 'C' ne remplit pas cette fonction. Si c'est effectivement un problème, il faut que tu détermines quelle est la locale qui convient à ta base avant tout autre chose. Ensuite il faut que tu l'installes sur ton système ubuntu si elle n'y est pas déjà.

  6. #6
    Inactif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 245
    Points : 262
    Points
    262
    Par défaut
    Bonsoir
    Cette solution est supposée fonctionner directement sans autre manipulation.
    Oui ... mais ...Le problème c'est que cela ne fonctionne plus avec les 9.+ si initdb
    n'est pas exécuté en (LC_) 'C'.

    (.........la locale 'C' ne remplit pas cette fonction.)
    Non pas exactement ....
    Si votre moteur est initialisé "C" , vous avez par la suite la possibilité de créer
    plusieurs bases sous différents (encodages) (9.+)
    Il suffit d'aligner les paramètres de chaque base via leurs fichiers (postgresl.conf)
    respectifs. (plusieurs instances)
    Vous avez du Latin et de Utf8 ou autres possible via un moteur unique.

    Je pense que pour les bases en sous-instances avec 'C' une pluralité d'encodages
    doit être gérée dans la commande de création (9+)
    Je vais faire le test si j'ai un moteur 9 sous la main...

    SQLpro.

    Je ne vois pas de lien avec une pseudo pauvreté de fontes Linux ???
    En mode UTF8 certains caractères ne sont pas gérés correctement par Postgresql
    Linux n'est pas en cause.
    Cordialement

  7. #7
    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 bustaf Voir le message
    Oui ... mais ...Le problème c'est que cela ne fonctionne plus avec les 9.+ si initdb
    n'est pas exécuté en (LC_) 'C'.
    Pourquoi ça ne fonctionnerait pas en 9.0?
    Les incompatibilités ascendantes sont mentionnées dans la doc et il n'y a rien à ce sujet.

  8. #8
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    merci beaucoup pour vos réponses !
    je viens d'avoir l'avis d'un ami qui s'y connait beaucoup en bases de données.
    selon lui, le format d'encodage utf8 est le plus évolué à l'heure actuelle. aussi me conseille-t'il de l'utiliser plutôt que le Latin1.

    je vais donc garder ce format d'encodage. je considère donc que ce post est résolu !

    encore merci !

  9. #9
    Inactif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 245
    Points : 262
    Points
    262
    Par défaut
    Bonsoir
    estofilo
    Pourquoi ça ne fonctionnerait pas en 9.0?
    Un peu surpris comme vous , j'ai rencontré le problème il y a un moment déjà
    en travaillant sur les versions 9 en version bêta.
    J'ai une 9.03 supposée finalisée sur une machine Debian Squeeze 6, je vais refaire un test..
    thor76160
    Si vous pouvez fournir votre développement avec notre langue tronquée; sans les caractères accentués , vous en avez de la chance....
    Si vous envisagez de faire communiquer la base avec une interface 80 (web) vous allez rencontrer des problèmes plus sérieux... ( l'ampersand &) et le ; qui est rejeté
    dans le nominatif champs.La taille native maximum pour les champs est également trop courte avec l'encodage utf8...
    L'utf8 pour nous Latins engendre un nombre de problèmes considérable.

    Par exemple,un utilisateur (Latin) distant, sur un navigateur,
    va probablement, lui ,saisir correctement avec les caractères accentués,
    le problème votre utf8 ne va pas renseigner une correspondance distinct mais
    toujours un même code unique de non gestion..
    Le problème est encore plus sérieux avec les claviers virtuels qui
    peuvent gérer plusieurs encodages dynamiquement dans un même saisie...
    Regardez l'encodage par défaut utilisé par votre navigateur, vous allez être surpris.

    Cordialement


  10. #10
    Inactif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 245
    Points : 262
    Points
    262
    Par défaut
    Bonjour
    Thor76160
    Vous pouvez traiter les problèmes partialement avec certaines fonctions
    spécifiques de Postgresql mais sachez qu'il n'y a pas d'instructions
    CREATE CONVERSION,ALTER CONVERSION,DROP CONVERSION
    dans le standard SQL.

    Je vous conseille fortement d'adopter Latin1 via la syntaxe proposée
    par estofilo
    qui est probablement parfaitement compatible avec votre
    version.et peut être également avec les 9.x je vais vérifier..
    ce n'est pas si simple car il y a un encodage natif du système
    a l'installation. Quand vous lancez un serveur X le clavier est
    ré-encodé
    (cela vous donne les accents(xterm, rxvt etc...) via un serveur
    natif utf8).
    Contrairement a Lenny 5 avec Debian 6 Squeeze ,en mode installation
    (initiés) à une des étapes sélectives de l'encodage vous n'avez pas
    d'autres choix possibles que valider UTF8-FR. ???
    J'espère que cela ne va pas créer un nouveau problème avec Pg...
    Remarque: (Ubuntu est fondée sur un base Debian).

    Estofilo,je lis bien comme vous Page 397 la documentation Pg 9.03 (en PDF)
    Important
    Sur la plupart des systèmes d'exploitation modernes, PostgreSQLTM peut déterminer le jeu de caractères impliqué
    par la variable LC_CTYPE, et s'assure que l'encodage correspondant de la base de données est utilisé.
    Sur les systèmes plus anciens, il est de la responsabilité de l'utilisateur de s'assurer que l'encodage attendu par la locale est
    bien utilisé. Une erreur à ce niveau risque fort de conduire à un comportement étrange des opérations liées à la locale, tel le tri.

    PostgreSQLTM autorise les superutilisateurs à créer des bases de données avec le jeu de caractère SQL_ASCII
    même lorsque la variable LC_CTYPE n'est pas à C ou POSIX. Comme indiqué plus haut, SQL_ASCII n'impose
    aucun encodage particulier aux données stockées en base, ce qui rend ce paramétrage vulnérable aux comporte-
    ments erratiques lors d'opérations liées à la locale. Cette combinaison de paramètres est dépréciée et pourrait un
    jour être interdite.

    Mais le résultat en 9.03 est bien le suivant....

    postgres-# CREATE DATABASE base encoding='LATIN1' lc_collate='C' lc_ctype='C' template=template0;
    ERROR: syntax error at or near "CREATE" at character 88
    STATEMENT: CREATE DATABASE base encoding='LATIN1' lc_collate='C' lc_ctype='C' template=template0
    CREATE DATABASE base encoding='LATIN1' lc_collate='C' lc_ctype='C' template=template0
    CREATE DATABASE base encoding='LATIN1' lc_collate='C' lc_ctype='C' template=template0;
    ERROR: syntax error at or near "CREATE"
    LINE 2: CREATE DATABASE base encoding='LATIN1' lc_collate='C' lc_ct...
    ^

    Variante avec "
    postgres=# CREATE DATABASE base encoding="LATIN1" lc_collate="C" lc_ctype="C" template=template0;
    ERROR: syntax error at or near ""LATIN1"" at character 32
    STATEMENT: CREATE DATABASE base encoding="LATIN1" lc_collate="C" lc_ctype="C" template=template0;
    ERROR: syntax error at or near ""LATIN1""
    LINE 1: CREATE DATABASE base encoding="LATIN1" lc_collate="C" lc_ct...

    Variante directement à partir du répertoire moteur

    postgres@debian-ppc:/usr/local/pgsql/bin$ ./createdb base encoding='LATIN1' lc_collate='C' lc_ctype='C' template=template0;
    createdb: too many command-line arguments (first is "lc_collate=C")
    Try "createdb --help" for more information.

    Je pense que dans le contexte de la (doc) ,votre terminal shell utilisateur profilé est
    supposé ascii (via un .bash ou un .profile)
    mais ce n'est pas le cas par défaut avec une installation en utf8..
    ???


    Encore la commande sous une autre forme pour avoir la bonne erreur.
    postgres@debian-ppc:/usr/local/pgsql/bin$ ./createdb -E latin1 base
    ERROR: encoding LATIN1 does not match locale fr_FR.UTF-8
    DETAIL: The chosen LC_CTYPE setting requires encoding UTF8.
    STATEMENT: CREATE DATABASE base ENCODING 'latin1';

    createdb: database creation failed: ERROR: encoding LATIN1 does not match locale fr_FR.UTF-8
    DETAIL: The chosen LC_CTYPE setting requires encoding UTF8.

    Par defaut dans le terminal locale me donne

    LANG=fr_FR.UTF-8
    LC_CTYPE="fr_FR.UTF-8"
    LC_NUMERIC="fr_FR.UTF-8"
    LC_TIME="fr_FR.UTF-8"
    LC_COLLATE="fr_FR.UTF-8"
    LC_MONETARY="fr_FR.UTF-8"
    LC_MESSAGES="fr_FR.UTF-8"
    LC_PAPER="fr_FR.UTF-8"
    LC_NAME="fr_FR.UTF-8"
    LC_ADDRESS="fr_FR.UTF-8"
    LC_TELEPHONE="fr_FR.UTF-8"
    LC_MEASUREMENT="fr_FR.UTF-8"
    LC_IDENTIFICATION="fr_FR.UTF-8"
    LC_ALL=

    Donc
    export LANG=UTF8
    local donne:

    LANG=UTF8
    LC_CTYPE="UTF8"
    LC_NUMERIC="UTF8"
    LC_TIME="UTF8"
    LC_COLLATE="UTF8"
    LC_MONETARY="UTF8"
    LC_MESSAGES="UTF8"
    LC_PAPER="UTF8"
    LC_NAME="UTF8"
    LC_ADDRESS="UTF8"
    LC_TELEPHONE="UTF8"
    LC_MEASUREMENT="UTF8"
    LC_IDENTIFICATION="UTF8"
    LC_ALL=UTF8


    postgres=# CREATE DATABASE base encoding='LATIN1' lc_collate='C' lc_ctype='C' template=template0;
    CREATE DATABASE
    postgres=# \l
    List of databases
    Name | Owner | Encoding | Collation | Ctype | Access privileges
    -----------+----------+----------+-------------+-------------+-----------------------
    base | postgres | LATIN1 | C | C |
    postgres | postgres | UTF8 | fr_FR.UTF-8 | fr_FR.UTF-8 |
    template0 | postgres | UTF8 | fr_FR.UTF-8 | fr_FR.UTF-8 | =c/postgres +
    | | | | | postgres=CTc/postgres
    template1 | postgres | UTF8 | fr_FR.UTF-8 | fr_FR.UTF-8 | =c/postgres +
    | | | | | postgres=CTc/postgres
    (4 rows)

    Pas besoin d'initialiser obligatoirement le moteur 'C' , mais je vais vérifier que le backend
    C /C++ reçoit bien du moteur les données appelées correctes avec les accents....

    Cordialement


  11. #11
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    Merci Bustaf, je vais essayer votre méthode !

    je vais essayer cette démarche :
    copiez et collez les commandes suivantes au shell

    export LANG="C"
    export LC_CTYPE="C"
    export LC_NUMERIC="C"
    export LC_TIME="C"
    export LC_COLLATE="C"
    export LC_MONETARY="C"
    export LC_MESSAGES="C"
    export LC_PAPER="C"
    export LC_NAME="C"
    export LC_ADDRESS="C"
    export LC_TELEPHONE="C"
    export LC_MEASUREMENT="C"
    export LC_IDENTIFICATION="C"
    export LC_ALL="C"

    locale pour vérifier les nouvelles valeurs

    initialiser le moteur une fois ces valeurs instruites

    (su postgres)
    initdb -D /home/mabase
    mais comment dois-je faire pour modifier ces valeurs dans le shell ? c'est une opération que je ne connais pas, je suis encore débutant en linux ^^

    ensuite j'utiliserais cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    postgres=# CREATE DATABASE base encoding='LATIN1' lc_collate='C' lc_ctype='C' template=template0;
    CREATE DATABASE
    postgres=# \l
    je cromprends la première étape, mais que signifie postgres=# \l ??

  12. #12
    Inactif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 245
    Points : 262
    Points
    262
    Par défaut
    Bonjour
    Thor76160, Le (Merci) on le doit à Estofilo
    le problème vient tout simplement des valeurs potentielles initialisées dans le terminal
    le fr_FR.UTF-8 (il ne connaît pas....)

    le \l est simplement la commande pour lister les bases quand vous êtes dans le shell (psql)

    Essayez de vous renseigner via un utilisateur Ubuntu initié
    Mon installation est différente de la votre elle est originaire d'une compilation
    des sources.
    Vous utilisez probablement un (package) binaire Ubuntu qui est installé
    sur des chemins (path) spécifiques.
    Je peux vous aider d'une (façon prompt possible) uniquement si vous partez d'une compilation personnalisée des sources ,similaire.

    Cordialement

  13. #13
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    ah, dans ce cas merci Estofilo !
    je vais me renseigner, je reviendrais quand j'aurais de nouvelles infos.

  14. #14
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    j'ai fais un 'locale -a' dans mon terminal, voilà ce que j'ai obtenu :

    C
    en_AG
    en_AG.utf8
    en_AU.utf8
    en_BW.utf8
    en_CA.utf8
    en_DK.utf8
    en_GB.utf8
    en_HK.utf8
    en_IE.utf8
    en_IN
    en_IN.utf8
    en_NG
    en_NG.utf8
    en_NZ.utf8
    en_PH.utf8
    en_SG.utf8
    en_US.utf8
    en_ZA.utf8
    en_ZW.utf8
    fr_BE.utf8
    fr_CA.utf8
    fr_CH.utf8
    fr_FR.utf8
    fr_LU.utf8
    POSIX
    il y a donc fr_FR.utf8 !

  15. #15
    Inactif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 245
    Points : 262
    Points
    262
    Par défaut
    Bonjour
    (Avec une installation (allégée...))
    root@debian-ppc:/download/postgresql-9.0.3# locale -a

    C
    fr_FR.utf8
    POSIX

    C'est n'est pas relationnel avec le problème Postgresql ...
    Vous avez ce panel avec le serveur xorg pour plusieurs utilisateurs (desktop) éventuels via
    des entrées (xdm etc...) ou pour les TTY texte session ALT F2... etc ...

    C'est Postgresql qui ne reconnaît pas ces formes déclarées.
    Il attend (UTF8) disponible via la commande:
    export LANG=UTF8

    Cordialement

  16. #16
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    j'ai bien lancé cette ligne de commande mais elle semble ne provoquer aucun changement :/

  17. #17
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    ok alors j'ai du nouveau !

    le export Lang=utf8 fonctionne, il change la locale.
    seulement, une création de base de données en latin1 via phppgadmin génère l'erreur habituelle.

    il faut impérativement passer par le terminal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE DATABASE base encoding='LATIN1' lc_collate='C' lc_ctype='C' template=template0;
    la base a donc été créée j'aurais préféré que ce soit correctement géré par phppgadmin, mais tant pis.
    je mets le sujet en résolu.

    merci beaucoup !

  18. #18
    Inactif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 245
    Points : 262
    Points
    262
    Par défaut
    Bonsoir
    Suivez ce déroulement avec vos path alignés pour répondre exactement à ce que vous attendez.

    mkdir /home/pgsql
    chown -R postgres /home/pgsql
    chmod -R 0700 /home/pgsql

    su postgres

    postgres@debian-ppc:/usr/local/pgsql/bin$ export LANG=C
    postgres@debian-ppc:/usr/local/pgsql/bin$ locale
    LANG=C
    LC_CTYPE="C"
    LC_NUMERIC="C"
    LC_TIME="C"
    LC_COLLATE="C"
    LC_MONETARY="C"
    LC_MESSAGES="C"
    LC_PAPER="C"
    LC_NAME="C"
    LC_ADDRESS="C"
    LC_TELEPHONE="C"
    LC_MEASUREMENT="C"
    LC_IDENTIFICATION="C"
    LC_ALL=

    postgres@debian-ppc:/usr/local/pgsql/bin$ ./initdb -D /home/pgsql
    The files belonging to this database system will be owned by user "postgres".
    This user must also own the server process.

    The database cluster will be initialized with locale C.
    The default database encoding has accordingly been set to SQL_ASCII.
    The default text search configuration will be set to "english".

    fixing permissions on existing directory /home/pgsql ... ok
    creating subdirectories ... ok
    selecting default max_connections ... 100
    selecting default shared_buffers ... 28MB
    creating configuration files ... ok
    creating template1 database in /home/pgsql/base/1 ... ok
    initializing pg_authid ... ok
    initializing dependencies ... ok
    creating system views ... ok
    loading system objects' descriptions ... ok
    creating conversions ... ok
    creating dictionaries ... ok
    setting privileges on built-in objects ... ok
    creating information schema ... ok
    loading PL/pgSQL server-side language ... ok
    vacuuming database template1 ... ok
    copying template1 to template0 ... ok
    copying template1 to postgres ... ok

    WARNING: enabling "trust" authentication for local connections
    You can change this by editing pg_hba.conf or using the -A option the
    next time you run initdb.

    Success. You can now start the database server using:

    ./postgres -D /home/pgsql
    or
    ./pg_ctl -D /home/pgsql -l logfile start


    /usr/local/pgsql/bin/pg_ctl -D /home/pgsql start

    postgres@debian-ppc:/usr/local/pgsql/bin$ ./psql
    psql (9.0.3)
    Type "help" for help.

    postgres=# create database base;
    CREATE DATABASE
    postgres=# \l
    List of databases
    Name | Owner | Encoding | Collation | Ctype | Access privileges
    -----------+----------+-----------+-----------+-------+-----------------------
    base | postgres | SQL_ASCII | C | C |
    postgres | postgres | SQL_ASCII | C | C |
    template0 | postgres | SQL_ASCII | C | C | =c/postgres +
    | | | | | postgres=CTc/postgres
    template1 | postgres | SQL_ASCII | C | C | =c/postgres +
    | | | | | postgres=CTc/postgres
    (4 rows)

    postgres=# CREATE DATABASE base1 encoding='LATIN1' lc_collate='C' lc_ctype='C' template=template0;
    CREATE DATABASE
    postgres=# CREATE DATABASE base2 encoding='UTF8' lc_collate='C' lc_ctype='C' template=template0;
    CREATE DATABASE
    postgres=# \l
    List of databases
    Name | Owner | Encoding | Collation | Ctype | Access privileges
    -----------+----------+-----------+-----------+-------+-----------------------
    base | postgres | SQL_ASCII | C | C |
    base1 | postgres | LATIN1 | C | C |
    base2 | postgres | UTF8 | C | C |
    postgres | postgres | SQL_ASCII | C | C |
    template0 | postgres | SQL_ASCII | C | C | =c/postgres +
    | | | | | postgres=CTc/postgres
    template1 | postgres | SQL_ASCII | C | C | =c/postgres +
    | | | | | postgres=CTc/postgres
    (6 rows)

    Si le moteur est initialisé avec "C" les bases crées sans spécifications sont ascii par défaut
    Un point d'entrée incorrectement encodé pour Postgresql n'a aucune incidence
    de plus vous pouvez creer sur d'autres encodages sans problème.
    Ma première réponse était donc la plus judicieuse pour vous...

    Bon courage .... (thor76160, j'ai trop de (TAF) pour poursuivre l'échange dans l'immédiat)

    Cordialement.

  19. #19
    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 bustaf Voir le message
    Mais le résultat en 9.03 est bien le suivant....

    postgres-# CREATE DATABASE base encoding='LATIN1' lc_collate='C' lc_ctype='C' template=template0;
    ERROR: syntax error at or near "CREATE" at character 88
    STATEMENT: CREATE DATABASE base encoding='LATIN1' lc_collate='C' lc_ctype='C' template=template0
    Ca fonctionne pour moi en 9.0.3:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    postgres=# show lc_ctype;
      lc_ctype   
    -------------
     en_US.UTF-8
    (1 row)
     
    postgres=# CREATE DATABASE base encoding='LATIN1' lc_collate='C' lc_ctype='C' template=template0;
    CREATE DATABASE
     
    postgres=# select version();
                                                 version                            
     
    --------------------------------------------------------------------------------
    ------------------
     PostgreSQL 9.0.3 on i686-pc-linux-gnu, compiled by GCC gcc (Ubuntu 4.4.1-4ubunt
    u9) 4.4.1, 32-bit
    (1 row)
    La commande est exactement la même, à un détail près: le prompt juste avant est =# postgres et non -# postgres. Ce détail veut dire qu'il y avait qq chose d'autre de saisi avant le CREATE et on peut supposer que c'est la raison de l'erreur, surtout que c'est une erreur de syntaxe.

  20. #20
    Inactif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 245
    Points : 262
    Points
    262
    Par défaut
    Bonsoir

    le -# n'est pas en rapport je pense ... ????

    postgres@debian-ppc:/usr/local/pgsql/bin$ ./pgsql
    bash: ./pgsql: Aucun fichier ou dossier de ce type
    postgres@debian-ppc:/usr/local/pgsql/bin$ ./psql
    psql (9.0.3)
    Type "help" for help.




    postgres=# ls (factice ça fait le -# )
    postgres-#
    postgres-#
    postgres-# \l
    List of databases
    Name | Owner | Encoding | Collation | Ctype | Access privileges
    -----------+----------+----------+-------------+-------------+-----------------------
    base1 | postgres | LATIN1 | C | C |
    base2 | postgres | LATIN1 | C | C |
    postgres | postgres | UTF8 | fr_FR.UTF-8 | fr_FR.UTF-8 |
    template0 | postgres | UTF8 | fr_FR.UTF-8 | fr_FR.UTF-8 | =c/postgres +
    | | | | | postgres=CTc/postgres
    template1 | postgres | UTF8 | fr_FR.UTF-8 | fr_FR.UTF-8 | =c/postgres +
    | | | | | postgres=CTc/postgres
    (5 rows)

    postgres-# \l
    List of databases
    Name | Owner | Encoding | Collation | Ctype | Access privileges
    -----------+----------+----------+-------------+-------------+-----------------------
    base1 | postgres | LATIN1 | C | C |
    base2 | postgres | LATIN1 | C | C |
    postgres | postgres | UTF8 | fr_FR.UTF-8 | fr_FR.UTF-8 |
    template0 | postgres | UTF8 | fr_FR.UTF-8 | fr_FR.UTF-8 | =c/postgres +
    | | | | | postgres=CTc/postgres
    template1 | postgres | UTF8 | fr_FR.UTF-8 | fr_FR.UTF-8 | =c/postgres +
    | | | | | postgres=CTc/postgres
    (5 rows)

    postgres-#

    postgres-# ^C (control c pour avoir de nouveau le =#)
    postgres=#


    je vais chercher dans la doc le fonctionnement précis de ce truc ou lire les sources
    concernés ..
    (ça ne pas être une faute de frappe il est avant la focus curseur disponible.)
    pourquoi thor76160 a aussi l'erreur ??
    Je remarque quand il y a quelque chose avant, une erreur le mentionne.
    mais pas avec une instruction interne ...

    postgres=# ls
    postgres-#
    postgres-#
    postgres-#
    postgres-# \l
    List of databases
    Name | Owner | Encoding | Collation | Ctype | Access privileges
    -----------+----------+----------+-------------+-------------+-----------------------
    base1 | postgres | LATIN1 | C | C |
    base2 | postgres | LATIN1 | C | C |
    postgres | postgres | UTF8 | fr_FR.UTF-8 | fr_FR.UTF-8 |
    template0 | postgres | UTF8 | fr_FR.UTF-8 | fr_FR.UTF-8 | =c/postgres +
    | | | | | postgres=CTc/postgres
    template1 | postgres | UTF8 | fr_FR.UTF-8 | fr_FR.UTF-8 | =c/postgres +
    | | | | | postgres=CTc/postgres
    (5 rows)

    postgres-# postgres@debian-ppc:/usr/local/pgsql/bin$ ./createdb base encoding='LATIN1' lc_collate='C' lc_ctype='C' template=template0;
    ERROR: syntax error at or near "ls" at character 1
    STATEMENT: ls
    postgres@debian-ppc:/usr/local/pgsql/bin$ ./createdb base encoding='LATIN1' lc_collate='C' lc_ctype='C' template=template0;
    ERROR: syntax error at or near "ls"
    LINE 1: ls
    ^

    postgres=# createdb: too many command-line arguments (first is "lc_collate=C")
    postgres-# Try "createdb --help" for more information.
    postgres-#

    Moi j'ai:
    postgres=# show lc_ctype;
    lc_ctype
    -------------
    fr_FR.UTF-8
    (1 row)

    ?????? cette différence

    /usr/local/pgsql/bin$ ./createdb -E latin1 base
    Là directement par le shell du système ,il n'y a pas de buffer (readline) supposé -# et l'erreur d'encodage est dénoncée clairement.

    Je vais essayer avec un I7-950 en O/S (AMD64) je suis actuellement sur une machine
    RS/6000 Squeeze Debian en PPC....
    De plus je ne référence pas un système courant j'ai recompilé presque la moité de la distribution avec l'espoir d'accélérer un peu cette vielle machine...
    Je finis une nouvelle compilation de GCC en 4.5.2 ,je recompile les sources PG sur du ext4 (je suis sur une partition en btrfs ) et je réessaye quand même sur cette vielle machine,je veux comprendre clairement ce problème d'encodage.

    Cordialement


+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Problème lors de la création d'une base de données
    Par dr.zed dans le forum Administration
    Réponses: 3
    Dernier message: 04/04/2011, 12h45
  2. Probléme lors de la création d'une base à vide
    Par IronManOracle dans le forum Oracle
    Réponses: 1
    Dernier message: 25/08/2010, 15h02
  3. problème d'encodage lors de la création d'une base
    Par thor76160 dans le forum PostgreSQL
    Réponses: 11
    Dernier message: 29/01/2010, 19h47
  4. Problème de charset lors de la création d'une instance 8i
    Par girint dans le forum Administration
    Réponses: 2
    Dernier message: 15/06/2007, 13h50
  5. Réponses: 8
    Dernier message: 06/06/2007, 17h03

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