HtmlToText
accueil actualités documentation forums association entreprises développeurs planète support vendredi 27 juillet 2018 daniel verite aller plus loin avec avec icu (postgres 10) depuis la version 10, postgres peut être configuré avec icu , la bibliothèque de référence pour unicode, afin d’utiliser ses collations (règles de tri et de comparaison de chaînes de caractères) via des clauses collate . pour ce faire, les collations icu pour la plupart des langues/pays sont automatiquement créées au moment d’initdb (on les trouvera dans pg_catalog.pg_collation ), et d’autres peuvent être ajoutées plus tard avec create collation . au-delà du support des collations, icu fournit d’autres services relatifs aux locales et à la gestion du texte multilingue, suivant les recommandations d’unicode. a partir du moment où nos binaires postgres sont liées à icu (la plupart le sont parce que les installeurs les plus importants comme apt, rpm ou rdb l’incluent d’office), pourquoi ne pas chercher à bénéficier de tous ces services à travers sql? c’est le but de icu_ext , une extension en c implémentant des interfaces sql aux fonctions d’icu. actuellement elle comprend une vingtaine de fonctions permettant d’inspecter les locales et les collations, de découper du texte, de comparer et trier les chaînes de caractères, d’évaluer l’utilisation trompeuse de caractères unicode (spoofing), d’épeler des nombres et de faire des conversions entre systèmes d’écriture (translitération). avant de voir les fonctions de comparaison et tri, faisons un point sur ce qu’amène l’intégration d’icu dans postgres. les bénéfices d’icu par rapport aux collations du système versionnage : pg_collation.collversion contient le numéro de version de chaque collation au moment de sa création, et si au cours de l’exécution elle ne correspond plus à celle de la bibliothèque icu (typiquement après un upgrade), un avertissement est émis, invitant l’utilisateur à reconstuire les index potentiellement affectés et à enregistrer la nouvelle version de la collation dans le catalogue. cohérence inter-systèmes : une même collation icu trie de la même façon entre systèmes d’exploitation différents, ce qui n’est pas le cas avec les “libc” (bibliothèque c de base sur laquelle s’appuie tous les programmes du système). par example avec un même lc_collate à en_us.utf-8 a un comportement différent entre linux and freebsd: des couples de chaînes de caractères aussi simples que 0102 and "0102" se retrouvent ordonnés de manières opposées. c’est une des raisons pour lesquelles il ne faut pas répliquer une instance sur un serveur secondaire avec un système d’exploitation différent du primaire. vitesse d’indexation : postgres utilise les clefs abrégées (abbreviated keys) quand c’est possible (également appelées sort keys dans la terminologie icu), parce qu’elles peuvent vraiment accélérer l’indexation . mais comme le support de cette fonctionnalité via libc ( strxfrm ) s’est avéré buggé dans plusieurs systèmes dont linux pour certaines locales, elle est seulement activée pour les collations icu. comparaison de chaînes paramétrique : avec la libc, il y a typiquement une association figée entre la locale et la collation: par exemple fr_ca.utf-8 compare les chaînes avec les règles linguistiques du français tel qu’écrit au canada, mais sans possibilité de personnalisation ou de contrôle supplémentaire. avec icu, les collations acceptent un bon nombre de paramètre qui offre des possibilités au-delà de la spécification de la langue et du pays, comme montré dans la démo online de collationnement icu , ou dans le billet de peter eisentraut “more robust collations with icu support in postgresql 10” annonçant l’intégration icu l’année dernière, ou encore dans “what users can do with custom icu collations in postgres 10” (fil de discussion dans pgsql-hackers) . ce que postgres ne peut pas (encore) faire avec les collations icu malheureusement un problème empêche d’utiliser les comparaisons avancées à leur plein potentiel: l’infrastructure actuelle des opérateurs de comparaison dans postgres ne peut pas gérer le fait que des chaînes soient égales alors qu’elles ne sont pas équivalentes en comparaison octet par octet. pour s’assurer que cette contrainte est bien respectée, dès que des chaînes sont considérées comme égales par un comparateur linguistique (avec une fonction de la famille de strcoll), postgres cherche à les départager par comparaison binaire, via ce qu’on va appeler en anglais le strcmp tie-breaker ; le résultat généré par le comparateur icu (ou celui de libc d’ailleurs) est alors éliminé en faveur du résultat de la comparaison binaire. par exemple, on peut créer cette collation: create collation "fr-ci" ( locale = 'fr-u-ks-level1' , /* ou 'fr@colstrength=primary' */ provider = 'icu' ); ks-level1 ici signifie primary collation strength . il faut savoir que cette syntaxe avec les paramètres au format bcp-47 ne fonctionne pas (sans pour autant émettre d’erreur) avec icu 53 ou plus ancien. lorsqu’on n’est pas sûr de la syntaxe d’une collation, elle peut être passée à icu_collation_attributes() pour vérifier comment icu l’analyse, comme montré par un exemple un peu plus loin dans ce billet. quoiqu’il en soit, il y cinq niveaux de force de comparaison, le niveau primaire ne considérant que les caractères de base, c’est-à-dire qu’il ignore les différences engendrées par les accents et la casse (majucule ou minuscule). le principe de départager les chaînes égales via une comparaison binaire fait que l’égalité suivante, par exemple, ne va pas être satisfaite, contrairement à ce qu’on pourrait attendre: =# select 'eté' = 'été' collate "fr-ci" as equality ; equality ---------- f peut-être (espérons) que dans le futur, postgres pourra faire fonctionner complètement ces collations indépendante de la casse et autres, mais en attendant, il est possible de contourner ce problème avec des fonctions de icu_ext . voyons comment. comparer des chaînes avec des fonctions de icu_ext la fontion principale est: icu_compare(string1 text, string2 text [, collator text]) . elle renvoie le résultat de ucol_strcoll[utf8]() , comparant string1 et string2 avec collator qui est la collation icu. c’est un entier signé, négatif si string1 < string2, zéro if string = string2, et positif si string1 > string2. quand le 3ème argument collator est présent, ce n’est pas le nom d’une collation de la base de données déclarée avec create collation , mais la valeur qui serait passée dans le paramètre locale ou lc_collate , si on devait instancier cette collation. en d’autres termes, c’est un locale id au sens d’icu, indépendamment de postgres (oui, icu utilise le terme “id” pour désigner une chaîne de caractères dont le contenu est plus ou moins construit par aggrégation de paramètres). quand l’argument collator n’est pas spécifié, c’est la collation associée à string1 et string2 qui est utilisée pour la comparaison. ca doit être une collation icu et ça doit être la même pour les deux arguments, ou la fonction sortira une erreur. cette forme avec deux arguments est significativement plus rapide du fait que postgres garde ses collations ouvertes (au sens de ucol_open()/ucol_close() ) pour la durée de la session, tandis que l’autre forme avec l’argument collator explicite ouvre et ferme la collation icu à chaque appel. pour revenir à l’exemple précédent, cette fois on peut constater l’égalité des chaînes de caractère sous le régime de l’insensibilité à la casse et aux accents: =# select icu_compare ( 'eté' , 'été' , 'fr-u-ks-level1' ); icu_compare ------------- 0 les comparaisons sensibles à la casse mais insensibles aux accents sont aussi possibles: =# select icu_compare ( 'abécédaire' , 'abecedaire' , 'fr-u-ks-level1-kc' ), icu_compare ( 'abécédaire' , 'abecedaire' , 'fr-u-ks-level1-kc' ); icu_compare | icu_compare -------------+------------- 0 | 1 autre exemple, cette fois avec une collation postgres implicite: =# create collation mycoll ( locale = 'fr-u-ks-level1
Informations Whois
Whois est un protocole qui permet d'accéder aux informations d'enregistrement.Vous pouvez atteindre quand le site Web a été enregistré, quand il va expirer, quelles sont les coordonnées du site avec les informations suivantes. En un mot, il comprend ces informations;
%%
%% This is the AFNIC Whois server.
%%
%% complete date format : DD/MM/YYYY
%% short date format : DD/MM
%% version : FRNIC-2.5
%%
%% Rights restricted by copyright.
%% See https://www.afnic.fr/en/products-and-services/services/whois/whois-special-notice/
%%
%% Use '-h' option to obtain more information about this service.
%%
%% [2600:3c03:0000:0000:f03c:91ff:feae:779d REQUEST] >> postgresql.fr
%%
%% RL Net [##########] - RL IP [#########.]
%%
domain: postgresql.fr
status: ACTIVE
hold: NO
holder-c: P12742-FRNIC
admin-c: P12742-FRNIC
tech-c: GR283-FRNIC
zone-c: NFC1-FRNIC
nsl-id: NSL33187-FRNIC
registrar: GANDI
Expiry Date: 23/12/2018
created: 09/08/2004
last-update: 23/12/2016
source: FRNIC
ns-list: NSL33187-FRNIC
nserver: b.dns.gandi.net
nserver: a.dns.gandi.net
nserver: c.dns.gandi.net
source: FRNIC
registrar: GANDI
type: Isp Option 1
address: 63-65 boulevard Massena
address: PARIS
country: FR
phone: +33 1 70 37 76 61
fax-no: +33 1 43 73 18 51
e-mail: reg.afnic-notification@gandi.net
website: http://www.gandi.net
anonymous: NO
registered: 09/03/2004
source: FRNIC
nic-hdl: P12742-FRNIC
type: ORGANIZATION
contact: PostgreSQLFr
address: PostgreSQLFr
address: 13, rue du square Carpeaux
address: 75018 Paris
country: FR
phone: +33 6 74 15 56 78
e-mail: 7fedd12a112679876e45b5d878247f61-1503370@contact.gandi.net
registrar: GANDI
changed: 28/08/2012 nic@nic.fr
anonymous: NO
obsoleted: NO
source: FRNIC
nic-hdl: GR283-FRNIC
type: ROLE
contact: GANDI ROLE
address: Gandi
address: 15, place de la Nation
address: 75011 Paris
country: FR
e-mail: noc@gandi.net
trouble: -------------------------------------------------
trouble: GANDI is an ICANN accredited registrar
trouble: for more information:
trouble: Web: http://www.gandi.net
trouble: -------------------------------------------------
trouble: - network troubles: noc@gandi.net
trouble: - SPAM: abuse@gandi.net
trouble: -------------------------------------------------
admin-c: NL346-FRNIC
tech-c: NL346-FRNIC
tech-c: TUF1-FRNIC
notify: noc@gandi.net
registrar: GANDI
changed: 03/03/2006 noc@gandi.net
anonymous: NO
obsoleted: NO
source: FRNIC
REFERRER http://www.nic.fr
REGISTRAR AFNIC
SERVERS
SERVER fr.whois-servers.net
ARGS postgresql.fr
PORT 43
TYPE domain
RegrInfo
DISCLAIMER
%
% This is the AFNIC Whois server.
%
% complete date format : DD/MM/YYYY
% short date format : DD/MM
% version : FRNIC-2.5
%
% Rights restricted by copyright.
% See https://www.afnic.fr/en/products-and-services/services/whois/whois-special-notice/
%
% Use '-h' option to obtain more information about this service.
%
% [2600:3c03:0000:0000:f03c:91ff:feae:779d REQUEST] >> postgresql.fr
%
% RL Net [##########] - RL IP [#########.]
%
REGISTERED yes
ADMIN
HANDLE P12742-FRNIC
TYPE ORGANIZATION
CONTACT PostgreSQLFr
ADDRESS
PostgreSQLFr
13, rue du square Carpeaux
75018 Paris
COUNTRY FR
PHONE +33 6 74 15 56 78
EMAIL 7fedd12a112679876e45b5d878247f61-1503370@contact.gandi.net
SPONSOR GANDI
CHANGED 2012-08-28
ANONYMOUS NO
OBSOLETED NO
SOURCE FRNIC
TECH
HANDLE GR283-FRNIC
TYPE ROLE
CONTACT GANDI ROLE
ADDRESS
Gandi
15, place de la Nation
75011 Paris
COUNTRY FR
EMAIL noc@gandi.net
TROUBLE
-------------------------------------------------
GANDI is an ICANN accredited registrar
for more information:
Web: http://www.gandi.net
-------------------------------------------------
- network troubles: noc@gandi.net
- SPAM: abuse@gandi.net
-------------------------------------------------
ADMIN-C NL346-FRNIC
TECH-C
NL346-FRNIC
TUF1-FRNIC
NOTIFY noc@gandi.net
SPONSOR GANDI
CHANGED 2006-03-03
ANONYMOUS NO
OBSOLETED NO
SOURCE FRNIC
OWNER
HANDLE P12742-FRNIC
TYPE ORGANIZATION
CONTACT PostgreSQLFr
ADDRESS
PostgreSQLFr
13, rue du square Carpeaux
75018 Paris
COUNTRY FR
PHONE +33 6 74 15 56 78
EMAIL 7fedd12a112679876e45b5d878247f61-1503370@contact.gandi.net
SPONSOR GANDI
CHANGED 2012-08-28
ANONYMOUS NO
OBSOLETED NO
SOURCE FRNIC
DOMAIN
STATUS ACTIVE
HOLD NO
SPONSOR GANDI
EXPIRY DATE 23/12/2018
CREATED 2004-08-09
CHANGED 2016-12-23
SOURCE FRNIC
HANDLE NSL33187-FRNIC
NSERVER
B.DNS.GANDI.NET 213.167.229.1
A.DNS.GANDI.NET 173.246.98.1
C.DNS.GANDI.NET 217.70.179.1
NAME postgresql.fr
Go to top