Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/03/2011, 13h20   #1
Membre habitué
 
Inscription : décembre 2007
Messages : 579
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : décembre 2007
Messages : 579
Points : 114
Points : 114
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 :
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 !
thor76160 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2011, 15h05   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 950
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 950
Points : 17 769
Points : 17 769
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 +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2011, 17h14   #3
Membre habitué
 
Inscription : décembre 2007
Messages : 579
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : décembre 2007
Messages : 579
Points : 114
Points : 114
merci pour le lien, je viens de lire ce topic.

mais la solution apportée à mon problème concerne postgresql sous windows :
Citation:
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.
thor76160 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2011, 17h52   #4
Inactif
 
Inscription : novembre 2004
Messages : 247
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 247
Points : 217
Points : 217
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
bustaf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2011, 18h46   #5
Modérateur
 
Inscription : octobre 2008
Messages : 1 505
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 505
Points : 2 034
Points : 2 034
Citation:
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 :
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à.
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2011, 19h36   #6
Inactif
 
Inscription : novembre 2004
Messages : 247
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 247
Points : 217
Points : 217
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
bustaf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2011, 21h01   #7
Modérateur
 
Inscription : octobre 2008
Messages : 1 505
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 505
Points : 2 034
Points : 2 034
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.
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2011, 23h40   #8
Membre habitué
 
Inscription : décembre 2007
Messages : 579
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : décembre 2007
Messages : 579
Points : 114
Points : 114
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 !
thor76160 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2011, 01h23   #9
Inactif
 
Inscription : novembre 2004
Messages : 247
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 247
Points : 217
Points : 217
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

bustaf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2011, 05h15   #10
Inactif
 
Inscription : novembre 2004
Messages : 247
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 247
Points : 217
Points : 217
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

bustaf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2011, 12h32   #11
Membre habitué
 
Inscription : décembre 2007
Messages : 579
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : décembre 2007
Messages : 579
Points : 114
Points : 114
Merci Bustaf, je vais essayer votre méthode !

je vais essayer cette démarche :
Citation:
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 :
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 ??
thor76160 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2011, 14h50   #12
Inactif
 
Inscription : novembre 2004
Messages : 247
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 247
Points : 217
Points : 217
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
bustaf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2011, 15h02   #13
Membre habitué
 
Inscription : décembre 2007
Messages : 579
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : décembre 2007
Messages : 579
Points : 114
Points : 114
ah, dans ce cas merci Estofilo !
je vais me renseigner, je reviendrais quand j'aurais de nouvelles infos.
thor76160 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2011, 15h49   #14
Membre habitué
 
Inscription : décembre 2007
Messages : 579
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : décembre 2007
Messages : 579
Points : 114
Points : 114
j'ai fais un 'locale -a' dans mon terminal, voilà ce que j'ai obtenu :

Citation:
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 !
thor76160 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2011, 18h13   #15
Inactif
 
Inscription : novembre 2004
Messages : 247
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 247
Points : 217
Points : 217
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
bustaf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2011, 18h26   #16
Membre habitué
 
Inscription : décembre 2007
Messages : 579
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : décembre 2007
Messages : 579
Points : 114
Points : 114
j'ai bien lancé cette ligne de commande mais elle semble ne provoquer aucun changement :/
thor76160 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2011, 19h07   #17
Membre habitué
 
Inscription : décembre 2007
Messages : 579
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : décembre 2007
Messages : 579
Points : 114
Points : 114
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 :
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 !
thor76160 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2011, 20h46   #18
Inactif
 
Inscription : novembre 2004
Messages : 247
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 247
Points : 217
Points : 217
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.
bustaf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2011, 21h37   #19
Modérateur
 
Inscription : octobre 2008
Messages : 1 505
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 505
Points : 2 034
Points : 2 034
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 :
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.
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2011, 01h06   #20
Inactif
 
Inscription : novembre 2004
Messages : 247
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 247
Points : 217
Points : 217
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

bustaf est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h05.


 
 
 
 
Partenaires

Hébergement Web