Vous n'êtes pas identifié(e).

#26 17/03/2020 18:27:46

pifor
Membre

Re : Administration base Postgresql via SSH

Désolé il manquait un ';' pour la commande "show client_encoding'

\encoding
show client_encoding;
\l intensetbm
INSERT INTO adm_pay (pay_nom_eng,pay_nom_fra,pay_abr) VALUES ('Ivory Coast','Côte d Ivoire','CIV');
select * from_adm_pay where pay_abr='CIV';

Dernière modification par pifor (17/03/2020 18:28:09)


Pierre

Hors ligne

#27 17/03/2020 18:29:02

pifor
Membre

Re : Administration base Postgresql via SSH

jmarsac a écrit :
LECARROU a écrit :

j'ai modifier runpsql.bat et je n'ai plus l'avertissement au lancement de psql (cool)

si je fait

INSERT INTO adm_pay (pay_nom_eng,pay_nom_fra,pay_abr) VALUES ('Ivory Coast','Côte d Ivoire','CIV');

directement dans la console pslq pas de problème, il m'insère correctement les accents

mais si je lance le script depuis la console : \i 'D:/Users/jl3/intensetbm_test/intensetbm-etool/script2.txt' toujours un problème sur les accents...

Il faut vérifier/corriger l'encodage du fichier .txt contenant le script (D:/Users/jl3/intensetbm_test/intensetbm-etool/script2.txt par exemple)

OK mais comment fait-on avec Windows ?


Pierre

Hors ligne

#28 17/03/2020 18:30:24

LECARROU
Membre

Re : Administration base Postgresql via SSH

WIN1252
 client_encoding
-----------------
 WIN1252
(1 ligne)


                                           Liste des bases de données
    Nom     | Propriétaire | Encodage |  Collationnement   |    Type caract.    |        Droits d'accès
------------+--------------+----------+--------------------+--------------------+-------------------------------
 intensetbm | postgres     | UTF8     | French_France.1252 | French_France.1252 | =Tc/postgres                 +
            |              |          |                    |                    | postgres=CTc/postgres        +
            |              |          |                    |                    | intensetbm_admin=CTc/postgres
(1 ligne)


INSERT 0 1
 deleted | pay_ide | pay_nom_eng | pay_abr |  pay_nom_fra
---------+---------+-------------+---------+----------------
         |       2 | Ivory Coast | CIV     | Côte d Ivoire
         |       8 | Ivory Coast | CIV     | Côte d Ivoire
         |       9 | Ivory Coast | CIV     | Côte d Ivoire
(3 lignes)

il ne faut considérer que la dernière ligne de la tabel

Hors ligne

#29 17/03/2020 18:33:27

pifor
Membre

Re : Administration base Postgresql via SSH

Le paramètrage jeu de caractère côté client Windows et côté serveur PostgreSQL me semblent corrects.
Reste la piste de l'encodage du script sur Windows et peut-être autre chose que je ne vois pas.

Dernière modification par pifor (17/03/2020 18:33:41)


Pierre

Hors ligne

#30 17/03/2020 18:34:24

LECARROU
Membre

Re : Administration base Postgresql via SSH

quand j'enregistre mon fichier avec blocnote l'encodage est bien UTF-8

Hors ligne

#31 17/03/2020 18:35:41

LECARROU
Membre

Re : Administration base Postgresql via SSH

bon merci quand même ; )
bonne fin de journée

Hors ligne

#32 17/03/2020 19:21:41

pifor
Membre

Re : Administration base Postgresql via SSH

Remarque générale qui n'explique pas le problème précis qu'on a: au début de la discussion vous avez dit que vous prévoyez d'avoir une base sur Linux et vous développez avec une base Windows. Si vous utilisez la même version de PostgreSQL vous devez avoir en général le même comportement de la base mais pas sur certaines fonctionnalités liées aux jeux de caractères car PostgreSQL peut avoir un comportement différent liés aux paramètres de création de la base qui ne sont pas les mêmes sur Windows et Linux. Ainsi si je crée une base sur Linux avec PG 10.12 j'ai par défaut:

postgres=# create database demo;
CREATE DATABASE
postgres=# \l demo;
                             List of databases
 Name |  Owner   | Encoding |   Collate   |    Ctype    | Access privileges 
------+----------+----------+-------------+-------------+-------------------
 demo | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
(1 row)

postgres=# 

Je constate que le paramètres LC_COLLATE et LC_CTYPE sont différents avec Windows: ce qui peut entraîner des comportements différents, par exemple dans le tri de chaînes de caractères.

Dernière modification par pifor (17/03/2020 19:27:18)


Pierre

Hors ligne

#33 17/03/2020 21:30:00

pifor
Membre

Re : Administration base Postgresql via SSH

J'ai fait des tests avec PostgreSQL 10.12 sur Windows 2016, j'ai créé un script SQL avec notepad.exe.
Que le script soit sauvegardé en ANSI ou UTF-8 ne semble influer ni sur l'affichage ni sur le stockage d'une chaîne de caractères avec un caractère accentué.

Mon script en entrée:

select version();
\encoding
show client_encoding;
\l demo
\d t
truncate t;
insert into t values('Côte');
select * from t;

Résultat

select version();
                           version
-------------------------------------------------------------
 PostgreSQL 10.12, compiled by Visual C++ build 1800, 64-bit
(1 ligne)


WIN1252
show client_encoding;
 client_encoding
-----------------
 WIN1252
(1 ligne)


                                Liste des bases de données
 Nom  | Propriétaire | Encodage |  Collationnement   |    Type caract.    | Droits d'accès
------+--------------+----------+--------------------+--------------------+----------------
 demo | postgres     | UTF8     | French_France.1252 | French_France.1252 |
(1 ligne)


                    Table « public.t »
 Colonne | Type | Collationnement | NULL-able | Par défaut
---------+------+-----------------+-----------+------------
 c       | text |                 |           |


truncate t;
TRUNCATE TABLE
insert into t values('Côte');
INSERT 0 1
select * from t;
  c
------
 Côte
(1 ligne)

Dernière modification par pifor (17/03/2020 21:31:23)


Pierre

Hors ligne

#34 18/03/2020 02:27:57

jmarsac
Membre

Re : Administration base Postgresql via SSH

pifor a écrit :
jmarsac a écrit :

Il faut vérifier/corriger l'encodage du fichier .txt contenant le script (D:/Users/jl3/intensetbm_test/intensetbm-etool/script2.txt par exemple)

OK mais comment fait-on avec Windows ?

Le plus simple est d'utiliser notepad++ qui permet de contrôler et convertir l'encodage du fichier (client psql 12, server 11.2); j'ai utilisé deux scripts différents :

itest-ansi.sql (encodé en ANSI) :

\encoding
set client_encoding to 'Win1252';
show client_encoding;
\l b1
insert into t2 values ('öéùàè','ANSI');
select * from t2;
set client_encoding to 'UTF8';
show client_encoding;
select * from t2;
set client_encoding to 'Win1252';
show client_encoding;
select * from t2;

itest-utf8.sql (encodé en UTF8) :

\encoding
set client_encoding to 'Win1252';
show client_encoding;
\l b1
insert into t2 values ('öéùàè','UTF8');
select * from t2;
set client_encoding to 'UTF8';
show client_encoding;
select * from t2;
set client_encoding to 'Win1252';
show client_encoding;
select * from t2;
********* QUERY **********
create table t2 (a text,script_encoding text);
**************************

CREATE TABLE
********* QUERY **********
set client_encoding to 'Win1252';
**************************

SET
********* QUERY **********
show client_encoding;
**************************

 client_encoding 
-----------------
 WIN1252
(1 row)

                                    List of databases
 Name |  Owner   | Encoding |      Collate       |       Ctype        | Access privileges 
------+----------+----------+--------------------+--------------------+-------------------
 b1   | postgres | UTF8     | French_France.1252 | French_France.1252 | 
(1 row)

********* QUERY **********
insert into t2 values ('öéùàè','ANSI');
**************************

INSERT 0 1
********* QUERY **********
select * from t2;
**************************

   a   | script_encoding 
-------+-----------------
 öéùàè | ANSI
(1 row)

********* QUERY **********
set client_encoding to 'UTF8';
**************************

SET
********* QUERY **********
show client_encoding;
**************************

 client_encoding 
-----------------
 UTF8
(1 row)

********* QUERY **********
select * from t2;
**************************

   a   | script_encoding 
-------+-----------------
 öéùàè | ANSI
(1 row)

********* QUERY **********
set client_encoding to 'win1252';
**************************

SET
********* QUERY **********
select * from t2;
**************************

   a   | script_encoding 
-------+-----------------
 öéùàè | ANSI
(1 row)

********* QUERY **********
set client_encoding to 'Win1252';
**************************

SET
********* QUERY **********
show client_encoding;
**************************

 client_encoding 
-----------------
 WIN1252
(1 row)

                                    List of databases
 Name |  Owner   | Encoding |      Collate       |       Ctype        | Access privileges 
------+----------+----------+--------------------+--------------------+-------------------
 b1   | postgres | UTF8     | French_France.1252 | French_France.1252 | 
(1 row)

********* QUERY **********
insert into t2 values ('öéùàè','UTF8');
**************************

INSERT 0 1
********* QUERY **********
select * from t2;
**************************

     a      | script_encoding 
------------+-----------------
 öéùàè      | ANSI
 öéùàè | UTF8
(2 rows)

********* QUERY **********
set client_encoding to 'UTF8';
**************************

SET
********* QUERY **********
show client_encoding;
**************************

 client_encoding 
-----------------
 UTF8
(1 row)

********* QUERY **********
select * from t2;
**************************

     a      | script_encoding 
------------+-----------------
 öéùàè      | ANSI
 öéùàè | UTF8
(2 rows)

********* QUERY **********
set client_encoding to 'Win1252';
**************************

SET
********* QUERY **********
show client_encoding;
**************************

 client_encoding 
-----------------
 WIN1252
(1 row)

********* QUERY **********
select * from t2;
**************************

     a      | script_encoding 
------------+-----------------
 öéùàè      | ANSI
 öéùàè | UTF8
(2 rows)

Comme le dit Pifor, l'important est de bien configurer l'encodage du client et d'utiliser la bonne page de code dans la console (chcp)

Hors ligne

Pied de page des forums