Changeset 872

Show
Ignore:
Timestamp:
01/07/08 13:31:50 (1 year ago)
Author:
sas
Message:

Fin relecture geqo et application branches 81 et 82.
close #181

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • traduc/branches/bv81x/manuel/geqo.xml

    r232 r872  
    44Genetic Optimizer 
    55--> 
     6<!-- SAS : 20080107, PG8111 --> 
    67 
    78 <chapter id="geqo"> 
     
    3839    <para> 
    3940     Écrit par Martin Utesch (<email>utesch@aut.tu-freiberg.de</email>) 
    40      de l'institut de contrôle automatique de l'université des mines et de  
    41      technologie de Freiberg, Allemagne. 
     41     de l'Institut de Contrôle Automatique à l'Université des Mines et de  
     42     Technologie de Freiberg, Allemagne. 
    4243    </para> 
    4344   </note> 
     
    4546 
    4647  <sect1 id="geqo-intro"> 
    47    <title>Gestion des requêtes comme un problème complexe d'optimisation</title> 
    48  
    49    <para> 
    50     Parmi tous les opérateurs relationnels, le plus difficile à exécuter et à 
     48   <title>Gérer les requêtes, un problème d'optimisation complexe</title> 
     49 
     50   <para> 
     51    De tous les opérateurs relationnels, le plus difficile à exécuter et à 
    5152    optimiser est la jointure (<firstterm>join</firstterm>). Le nombre de plans 
    5253    alternatifs pour répondre à une requête croît de façon exponentielle avec le 
    53     nombre de jointures inclus. Un effort supplémentaire d'optimisation est dû 
     54    nombre de jointures. Un effort supplémentaire d'optimisation est dû 
    5455    au support d'une variété de <firstterm>méthodes de jointure</firstterm> 
    55     (par exemple les boucles imbriquées, les jointures de découpage, les 
    56     jointures d'assemblage dans <productname>PostgreSQL</productname>) pour 
     56    (boucles imbriquées, jointures de hachage, jointures de fusion...) pour 
    5757    exécuter des jointures individuelles et une diversité 
    58     d'<firstterm>index</firstterm> (par exemple R-tree, B-tree, découpage  
    59     dans <productname>PostgreSQL</productname>) comme chemins d'accès des 
    60     relations. 
    61    </para> 
    62  
    63    <para> 
    64     L'implémentation de l'optimiseur de <productname>PostgreSQL</productname> 
    65     réalise une <firstterm>recherche pratiquement exhaustive</firstterm> sur 
    66     tout l'espace des stratégies alternatives. Cet algorithme, tout d'abord 
    67     introduit dans la base de données <quote>System R</quote>, produit un ordre 
    68     de jointure presque optimal mais peut prendre beaucoup de temps et d'espace 
    69     mémoire lorsque le nombre de jointures dans une requête devient important. 
    70     Ceci rend inapproprié l'optimiseur ordinaire de requêtes de 
    71     <productname>PostgreSQL</productname> pour les requêtes établissant une 
    72     jointure entre un grand nombre de tables. 
    73    </para> 
    74  
    75    <para> 
    76     L'institut de contrôle automatique de l'université des mines et de  
    77     technologie, basé à Freiberg, Allemagne, a rencontré les problèmes décrits 
    78     car ces employés voulaient utiliser le DBMS 
     58    d'<firstterm>index</firstterm> (par exemple R-tree, B-tree, découpage...) 
     59    comme chemins d'accès des relations. 
     60   </para> 
     61 
     62   <para> 
     63    L'implantation de l'optimiseur de <productname>PostgreSQL</productname> 
     64    réalise une <firstterm>recherche quasi-exhaustive</firstterm> sur 
     65    l'ensemble des stratégies alternatives. Cet algorithme, tout d'abord 
     66    introduit à l'origine dans la base de données <quote>System R</quote> d'IBM, 
     67    produit un ordre de jointure quasi-optimal mais peut prendre beaucoup de temps et d'espace 
     68    mémoire à mesure que le nombre de jointures grandit. 
     69    L'optimiseur ordinaire de requêtes de 
     70    <productname>PostgreSQL</productname> devient donc inapproprié pour les 
     71    requêtes qui joignent un grand nombre de tables. 
     72   </para> 
     73 
     74   <para> 
     75    L'Institut de Contrôle Automatique de l'Université des Mines et de  
     76    Technologie, basé à Freiberg, en Allemagne, a rencontré des difficultés 
     77    lorsque ses employés ont voulu utiliser le SGBD 
    7978    <productname>PostgreSQL</productname> comme moteur pour leur système de 
    80     support pour la maintenance d'une grille de courant électrique. Le DBMS 
    81     avait besoin de gérer des requêtes comprenant des jointures larges pour la 
     79    support pour la maintenance d'une grille de courant électrique. Le SGBD 
     80    avait besoin de gérer des requêtes comprenant de nombreuses jointures pour la 
    8281    machine d'inférence du système de connaissances. 
    8382   </para> 
    8483 
    8584   <para> 
     85<!-- Supprimé dans la v83 et v82 --> 
    8686    Les difficultés en terme de performance pour l'exploration des plans de 
    8787    requêtes possibles ont créé la demande du développement d'une nouvelle 
     
    8989   </para> 
    9090 
    91    <para
    92     Dans la suite, nous décrivons l'implémentation d'un <firstterm>algorithme 
    93     génétique</firstterm> pour résoudre le problème des ordres de jointur
    94     d'une façon efficace pour les requêtes impliquant un grand nombre de ces 
    95     jointures. 
     91<!-- Mais je n'ai pas les sources de PG81 sous la main --
     92   <para> 
     93    La suite du document décrit le codage d'un <firstterm>algorithm
     94    génétique</firstterm> de résolution de l'ordonnancement des jointures 
     95    efficace pour les requêtes à jointures nombreuses. 
    9696   </para> 
    9797  </sect1> 
     
    100100   <title>Algorithmes génétiques</title> 
    101101 
     102<!-- fitness : ? Je doute qu'il s'agisse de forme physique :-/  
     103     to fit : s'intégrer, entrer, s'encastrer...  
     104     adaptation me semble convenir --> 
    102105   <para> 
    103106    L'algorithme génétique (<acronym>GA</acronym>) est une méthode 
    104     heuristique d'optimisation qui opère via des recherches non déterministes au 
    105     hasard. L'ensemble des solutions possibles pour le problème d'optimisation 
     107    d'optimisation heuristique qui opère par recherches non déterministes, 
     108    aléatoires. L'ensemble des solutions possibles au problème d'optimisation 
    106109    est considéré comme une <firstterm>population</firstterm> 
    107110    d'<firstterm>individus</firstterm>. Le degré d'adaptation d'un individu 
    108     dans son environnement est spécifié par sa <firstterm>forme 
    109     physique</firstterm>
     111    à son environnement est indiqué par sa <firstterm>valeur d'adaptation</firstterm> 
     112    (<foreignphrase>fitness</foreignphrase>)
    110113   </para> 
    111114 
     
    113116    Les coordonnées d'un individu dans l'espace de recherche sont représentées 
    114117    par des <firstterm>chromosomes</firstterm>, en fait un ensemble de chaînes 
    115     de caractères. Un <firstterm>gène</firstterm> est une sous-section d'un 
    116     chromosome qui code la valeur d'un seul paramètre en cours d'optimisation. 
    117     Les codages typiques pour un gène pourraient être 
     118    de caractères. Un <firstterm>gène</firstterm> est une sous-section de 
     119    chromosome qui code la valeur d'un paramètre simple en cours d'optimisation. 
     120    Les codages habituels d'un gène sont 
    118121    <firstterm>binary</firstterm> ou <firstterm>integer</firstterm>. 
    119122   </para> 
    120123 
    121124   <para> 
    122     À travers la simulation des opérations évolutives 
     125    La simulation des opérations d'évolution 
    123126    (<firstterm>recombinaison</firstterm>, <firstterm>mutation</firstterm> et 
    124     <firstterm>sélection</firstterm>), de nouvelles générations de points de 
    125     recherche sont trouvées affichant une meilleure forme physique que leurs 
    126     ancêtres. 
    127    </para> 
    128  
    129    <para> 
    130     D'après la <acronym>FAQ</acronym> de <systemitem 
    131     class="resource">comp.ai.genetic</systemitem>, il ne peut pas être dit plus fortement 
    132     qu'un <acronym>GA</acronym> n'est pas une recherche effectuée seulement au 
    133     hasard. Un <acronym>GA</acronym> utilise des processus stochastiques mais 
    134     le résultat n'est pas du tout dû au hasard (mieux que cela).  
     127    <firstterm>sélection</firstterm>) permet de trouver de nouvelles 
     128    générations de points de recherche qui présentent une meilleure adaptation 
     129    moyenne que leurs ancêtres. 
     130   </para> 
     131 
     132   <para> 
     133    Selon la <acronym>FAQ</acronym> de <systemitem 
     134    class="resource">comp.ai.genetic</systemitem>, on ne peut pas réellement 
     135    affirmer qu'un <acronym>GA</acronym> n'est pas purement une recherche 
     136    aléatoire. Un <acronym>GA</acronym> utilise des processus stochastiques, mais 
     137    le résultat est assurément non-aléatoire (il est mieux qu'aléatoire).  
    135138   </para> 
    136139 
     
    162165| INITIALISE P(t)                         | 
    163166+=========================================+ 
    164 | évalue FORMEPHYSIQUE de P(t)            | 
    165 +=========================================+ 
    166 | tant que pas ARRET CRITERE faire        | 
     167| évalue ADAPTATION de P(t)               | 
     168+=========================================+ 
     169| tant que pas CRITERE ARRET faire        | 
    167170|   +-------------------------------------+ 
    168171|   | P'(t)  := RECOMBINAISON{P(t)}       | 
     
    172175|   | P(t+1) := SELECTION{P''(t) + P(t)}  | 
    173176|   +-------------------------------------+ 
    174 |   | évalue FORMEPHYSIQUE de P''(t)      | 
     177|   | évalue ADAPTATION de P''(t)         | 
    175178|   +-------------------------------------+ 
    176179|   | t := t + 1                          | 
     
    181184 
    182185  <sect1 id="geqo-pg-intro"> 
    183    <title>Optimisation génétique des requêtes (<acronym>GEQO</acronym>) avec 
     186   <title>Optimisation génétique des requêtes (<acronym>GEQO</acronym>) dans 
    184187     PostgreSQL</title> 
    185188 
    186189   <para> 
    187     Le module <acronym>GEQO</acronym> est la solution du problème 
    188     d'optimisation des requêtes, une solution similaire au problème du voyageur 
    189     de commerce (<acronym>TSP</acronym>). L'approche du module 
    190     <acronym>GEQO</acronym> concernant le problème d'optimisation de requêtes 
    191     revient au problème bien connu du marchand de commerce 
    192     (<acronym>TSP</acronym>). Les plans de requêtes possibles sont 
     190    Le module <acronym>GEQO</acronym> utilise une approche du problème 
     191    d'optimisation des requêtes similaire à celui du voyageur 
     192    de commerce (<acronym>TSP</acronym>). Les plans de requêtes possibles sont 
    193193    codés comme des chaînes d'entiers. Chaque chaîne représente l'ordre de 
    194194    jointure d'une relation de la requête à une autre. Par exemple, l'arbre de 
     
    207207 
    208208   <para> 
    209     Des parties du module <acronym>GEQO</acronym> sont adaptées de l'algorithme 
     209    Diverses parties du module <acronym>GEQO</acronym> sont adaptées de l'algorithme 
    210210    Genitor de D. Whitley. 
    211211   </para> 
    212212 
    213213   <para> 
    214     Les caractéristiques spécifiques de l'implémentation de 
    215     <acronym>GEQO</acronym> dans <productname>PostgreSQL</productname> 
    216     sont&nbsp;: 
     214    Les caractéristiques spécifiques de l'implantation du 
     215    <acronym>GEQO</acronym> sont&nbsp;: 
    217216 
    218217    <itemizedlist spacing="compact" mark="bullet"> 
    219218     <listitem> 
    220219      <para> 
    221        Utilisation d'un <firstterm>état d'équilibre</firstterm> du 
    222        <acronym>GA</acronym> (remplacement des individus les moins performants 
    223        d'une population, pas un remplacement d'une génération complète) qui 
    224        permet une convergence rapide vers les plans de requêtes améliorés. C'est 
    225        essentiel pour une gestion des requêtes sur un temps raisonnable&nbsp;; 
     220      <!-- least fit : plus divergent ? --> 
     221       l'utilisation d'un algorithme génétique monostable (ou à état stable) 
     222       (remplacement des individus les moins ciblés au lieu d'un remplacement 
     223       global de génération) permet une convergence rapide vers des plans de 
     224       requêtes améliorés ; c'est indispensable au traitement des requêtes dans un 
     225       temps raisonnable&nbsp;; 
    226226      </para> 
    227227     </listitem> 
     
    229229     <listitem> 
    230230      <para> 
    231        Utilisation d'un <firstterm>croisement de recombinaison de 
    232        bord</firstterm> qui convient tout spécialement pour garder bas le 
    233        nombre de pertes aux bords pour la solution du <acronym>TSP</acronym> en 
    234        utilisant un <acronym>GA</acronym>; 
     231      <!-- Je me souviens maintenant pourquoi j'avais déjà buté sur cette 
     232      relecture du temps de la 8.0... --> 
     233      <!-- edge recombination crossover et edge losses ? --> 
     234       l'utilisation de croisements (recombinaisons) aux limites est particulièrement 
     235       adapté pour la restriction des pertes aux limites lors de la résolution 
     236       du problème du voyageur de commerce par un algorithme génétique&nbsp;; 
    235237      </para> 
    236238     </listitem> 
     
    238240     <listitem> 
    239241      <para> 
    240        La mutation comme opérateur génétique est obsolète d'une telle faço
    241        qu'aucun mécanisme de réparation n'est nécessaire pour générer des tours 
    242        <acronym>TSP</acronym> légaux
     242       la mutation en tant qu'opérateur génétique est rendue obsolète afi
     243       d'éviter la nécessité de mécanismes de réparation lors de la génération 
     244       de tournées valides du problème du voyageur de commerce
    243245      </para> 
    244246     </listitem> 
     
    254256 
    255257  <sect2 id="geqo-future"> 
    256    <title>Tâches pour la future implémentation de <acronym>GEQO</acronym> pour 
    257     <productname>PostgreSQL</productname></title> 
     258   <title>Tâches à réaliser pour la future implantation du <acronym>GEQO</acronym> 
     259    </title> 
    258260 
    259261     <para> 
     
    263265      <filename>src/backend/optimizer/geqo/geqo_main.c</filename>, 
    264266      pour les routines <function>gimme_pool_size</function> et 
    265       <function>gimme_number_generations</function>, nous devons trouver un 
    266       compromis dans les paramètres pour satisfaire deux demande
    267       concurrentes&nbsp;: 
     267      <function>gimme_number_generations</function>, il faut trouver un 
     268      compromis pour que les paramètres satisfassent deux besoin
     269      concurrents&nbsp;: 
    268270      <itemizedlist spacing="compact"> 
    269271       <listitem> 
    270272        <para> 
    271          Plan de requête optimum 
     273         l'optimisation du plan de requête&nbsp;; 
    272274        </para> 
    273275       </listitem> 
    274276       <listitem> 
    275277        <para> 
    276          Temps de calcul 
     278         le temps de calcul. 
    277279        </para> 
    278280       </listitem> 
     
    281283 
    282284     <para> 
    283       À un niveau plus basique, il n'est pas clair que résoudre l'optimisation  
    284       d'une requête avec un algorithme GA conçu pour TSP soit appropriée. Dans 
    285       le cas TSP, le coût associé avec toute sous-chaîne (tour partiel) est 
    286       indépendant du reste du tour mais ceci n'est certainement pas vrai pour 
    287       l'optimisation de requêtes. Du coup, la question reste posée quant au fait 
     285      À un niveau plus basique, il n'est pas certain qu'optimiser 
     286      une requête avec un algorithme génétique conçu pour le problème du 
     287      voyageur de commerce approprié. Dans le cas du voyageur de commerce, le 
     288      coût associé à une sous-chaîne quelconque (tour partiel) est 
     289      indépendant du reste du tour, mais cela n'est certainement plus vrai dans 
     290      le cas de l'optimisation de requêtes. Du coup, la question reste posée quant au fait 
    288291      que la recombinaison soit la procédure de mutation la plus efficace. 
    289292     </para> 
     
    304307      <ulink url="http://www.cs.bham.ac.uk/Mirrors/ftp.de.uu.net/EC/clife/www/location.htm">The 
    305308      Hitch-Hiker's Guide to Evolutionary Computation</ulink> (FAQ de <ulink 
    306       url="news://comp.ai.genetic"></ulink>) 
     309      url="news://comp.ai.genetic"></ulink>)&nbsp;; 
    307310     </para> 
    308311    </listitem> 
     
    312315      <ulink url="http://www.red3d.com/cwr/evolve.html">Evolutionary 
    313316      Computation and its application to art and design</ulink>, par 
    314       Craig Reynolds 
     317      Craig Reynolds&nbsp;; 
    315318     </para> 
    316319    </listitem> 
  • traduc/branches/bv82x/manuel/func.xml

    r853 r872  
    44 
    55 <chapter id="functions"> 
    6   <title>Fonctions et opérateurs</title> 
     6  <title>Fonctions et opᅵrateurs</title> 
    77 
    88  <indexterm zone="functions"> 
     
    1111 
    1212  <indexterm zone="functions"> 
    13    <primary>opérateur</primary> 
     13   <primary>opᅵrateur</primary> 
    1414  </indexterm> 
    1515 
    1616  <para> 
    1717   <productname>PostgreSQL</productname> fournit un grand nombre de fonctions 
    18    et d'opérateurs pour les types de données intégrés. Les utilisateurs peuvent 
    19    aussi définir leurs propres fonctions et opérateurs comme décrit dans 
     18   et d'opᅵrateurs pour les types de donnᅵes intᅵgrᅵs. Les utilisateurs peuvent 
     19   aussi dᅵfinir leurs propres fonctions et opᅵrateurs comme dᅵcrit dans 
    2020   la <xref linkend="server-programming"/>. 
    2121  </para> 
    2222  <para> 
    2323   Les commandes <command>\df</command> et 
    24    <command>\do</command> de <application>psql</application> sont utilisées 
     24   <command>\do</command> de <application>psql</application> sont utilisᅵes 
    2525   pour afficher respectivement la liste des fonctions et des 
    26    opérateurs. 
     26   opᅵrateurs. 
    2727  </para> 
    2828 
    2929  <para> 
    30    Lorsque l'on considère la portabilité, il est important de savoir que la 
    31    plupart des fonctions et opérateurs décrits dans ce chapitre, à l'exception des opérateurs 
    32    arithmétiques et logiques les plus triviaux et de quelques fonctions 
    33    spécifiquement indiquées, ne font pas partie du standard 
    34    <acronym>SQL</acronym>. Quelques fonctionnalités étendues sont 
    35    présentes dans d'autres systèmes de gestion de bases de données 
    36    <acronym>SQL</acronym> et dans la plupart des cas, ces fonctionnalités sont 
    37    compatibles et cohérentes à de nombreuses implantations. Ce chapitre n'est 
    38    pas exhaustif&nbsp;; des fonctions supplémentaires apparaissent dans les 
    39    sections adéquates du manuel. 
     30   Lorsque l'on considᅵre la portabilitᅵ, il est important de savoir que la 
     31   plupart des fonctions et opᅵrateurs dᅵcrits dans ce chapitre, ᅵ l'exception des opᅵrateurs 
     32   arithmᅵtiques et logiques les plus triviaux et de quelques fonctions 
     33   spᅵcifiquement indiquᅵes, ne font pas partie du standard 
     34   <acronym>SQL</acronym>. Quelques fonctionnalitᅵs ᅵtendues sont 
     35   prᅵsentes dans d'autres systᅵmes de gestion de bases de donnᅵes 
     36   <acronym>SQL</acronym> et dans la plupart des cas, ces fonctionnalitᅵs sont 
     37   compatibles et cohᅵrentes ᅵ de nombreuses implantations. Ce chapitre n'est 
     38   pas exhaustif&nbsp;; des fonctions supplᅵmentaires apparaissent dans les 
     39   sections adᅵquates du manuel. 
    4040  </para> 
    4141 
    4242 
    4343  <sect1 id="functions-logical"> 
    44    <title>Opérateurs logiques</title> 
     44   <title>Opᅵrateurs logiques</title> 
    4545 
    4646   <indexterm zone="functions-logical"> 
    47     <primary>opérateur</primary> 
     47    <primary>opᅵrateur</primary> 
    4848    <secondary>logique</secondary> 
    4949   </indexterm> 
    5050 
    5151   <indexterm> 
    52     <primary>booléen</primary> 
    53     <secondary>opérateurs</secondary> 
    54     <see>opérateurs, logique</see> 
    55    </indexterm> 
    56  
    57    <para> 
    58     Opérateurs logiques habituels&nbsp;: 
     52    <primary>boolᅵen</primary> 
     53    <secondary>opᅵrateurs</secondary> 
     54    <see>opᅵrateurs, logique</see> 
     55   </indexterm> 
     56 
     57   <para> 
     58    Opᅵrateurs logiques habituels&nbsp;: 
    5959 
    6060    <indexterm> 
    61      <primary>AND (opérateur)</primary> 
     61     <primary>AND (opᅵrateur)</primary> 
    6262    </indexterm> 
    6363 
    6464    <indexterm> 
    65      <primary>OR (opérateur)</primary> 
     65     <primary>OR (opᅵrateur)</primary> 
    6666    </indexterm> 
    6767 
    6868    <indexterm> 
    69      <primary>NOT (opérateur)</primary> 
     69     <primary>NOT (opᅵrateur)</primary> 
    7070    </indexterm> 
    7171 
     
    7979 
    8080    <indexterm> 
    81      <primary>négation</primary> 
     81     <primary>nᅵgation</primary> 
    8282    </indexterm> 
    8383 
     
    8888    </simplelist> 
    8989 
    90     <acronym>SQL</acronym> utilise une logique booléenne à trois valeurs dans 
    91     laquelle la valeur NULL représente <quote>inconnu</quote>. Les tables de 
    92      vérité à considérer sont les suivantes&nbsp;: 
     90    <acronym>SQL</acronym> utilise une logique boolᅵenne ᅵ trois valeurs dans 
     91    laquelle la valeur NULL reprᅵsente <quote>inconnu</quote>. Les tables de 
     92     vᅵritᅵ ᅵ considᅵrer sont les suivantes&nbsp;: 
    9393 
    9494    <informaltable> 
     
    181181 
    182182   <para> 
    183     Les opérateurs <literal>AND</literal> et <literal>OR</literal> sont 
    184     commutatifs, c'est-à-dire que l'échange des opérandes gauche et 
    185     droit n'affecte pas le résultat. Voir la <xref 
     183    Les opᅵrateurs <literal>AND</literal> et <literal>OR</literal> sont 
     184    commutatifs, c'est-ᅵ-dire que l'ᅵchange des opᅵrandes gauche et 
     185    droit n'affecte pas le rᅵsultat. Voir la <xref 
    186186    linkend="syntax-express-eval"/> pour plus d'informations sur l'ordre 
    187     d'évaluation des sous-expressions. 
     187    d'ᅵvaluation des sous-expressions. 
    188188   </para> 
    189189  </sect1> 
    190190 
    191191  <sect1 id="functions-comparison"> 
    192    <title>Opérateurs de comparaison</title> 
     192   <title>Opᅵrateurs de comparaison</title> 
    193193 
    194194   <indexterm zone="functions-comparison"> 
    195195    <primary>comparaison</primary> 
    196     <secondary>opérateurs</secondary> 
    197    </indexterm> 
    198  
    199    <para> 
    200     Les opérateurs de comparaison habituels sont disponibles, comme l'indique 
     196    <secondary>opᅵrateurs</secondary> 
     197   </indexterm> 
     198 
     199   <para> 
     200    Les opᅵrateurs de comparaison habituels sont disponibles, comme l'indique 
    201201    le <xref linkend="functions-comparison-table"/>. 
    202202   </para> 
    203203 
    204204   <table id="functions-comparison-table"> 
    205     <title>Opérateurs de comparaison</title> 
     205    <title>Opᅵrateurs de comparaison</title> 
    206206    <tgroup cols="2"> 
    207207     <thead> 
    208208      <row> 
    209        <entry>Opérateur</entry> 
     209       <entry>Opᅵrateur</entry> 
    210210       <entry>Description</entry> 
    211211      </row> 
     
    215215      <row> 
    216216       <entry><literal>&lt;</literal> </entry> 
    217        <entry>inférieur à</entry> 
     217       <entry>infᅵrieur ᅵ</entry> 
    218218      </row> 
    219219 
    220220      <row> 
    221221       <entry><literal>&gt;</literal> </entry> 
    222        <entry>supérieur à</entry> 
     222       <entry>supᅵrieur ᅵ</entry> 
    223223      </row> 
    224224 
    225225      <row> 
    226226       <entry><literal>&lt;=</literal> </entry> 
    227        <entry>inférieur ou égal à</entry> 
     227       <entry>infᅵrieur ou ᅵgal ᅵ</entry> 
    228228      </row> 
    229229 
    230230      <row> 
    231231       <entry><literal>&gt;=</literal> </entry> 
    232        <entry>supérieur ou égal à</entry> 
     232       <entry>supᅵrieur ou ᅵgal ᅵ</entry> 
    233233      </row> 
    234234 
    235235      <row> 
    236236       <entry><literal>=</literal> </entry> 
    237        <entry>égal à</entry> 
     237       <entry>ᅵgal ᅵ</entry> 
    238238      </row> 
    239239 
    240240      <row> 
    241241       <entry><literal>&lt;&gt;</literal> ou <literal>!=</literal> </entry> 
    242        <entry>différent de</entry> 
     242       <entry>diffᅵrent de</entry> 
    243243      </row> 
    244244     </tbody> 
     
    248248   <note> 
    249249    <para> 
    250      L'opérateur <literal>!=</literal> est converti en 
     250     L'opᅵrateur <literal>!=</literal> est converti en 
    251251     <literal>&lt;&gt;</literal> au moment de l'analyse. Il n'est pas possible 
    252      d'implanter des opérateurs <literal>!=</literal> et 
    253      <literal>&lt;&gt;</literal> réalisant des opérations différentes. 
     252     d'implanter des opᅵrateurs <literal>!=</literal> et 
     253     <literal>&lt;&gt;</literal> rᅵalisant des opᅵrations diffᅵrentes. 
    254254    </para> 
    255255   </note> 
    256256 
    257257   <para> 
    258     Les opérateurs de comparaison sont disponibles pour tous les types de 
    259     données pour lesquels cela a du sens. Tous les opérateurs de comparaison sont des 
    260     opérateurs binaires renvoyant des valeurs du type <type>boolean</type>&nbsp;; 
     258    Les opᅵrateurs de comparaison sont disponibles pour tous les types de 
     259    donnᅵes pour lesquels cela a du sens. Tous les opᅵrateurs de comparaison sont des 
     260    opᅵrateurs binaires renvoyant des valeurs du type <type>boolean</type>&nbsp;; 
    261261    des expressions comme <literal>1 &lt; 2 &lt; 3</literal> ne sont pas valides 
    262     (car il n'existe pas d'opérateur <literal>&lt;</literal> de comparaison d'une 
    263     valeur booléenne avec <literal>3</literal>). 
     262    (car il n'existe pas d'opᅵrateur <literal>&lt;</literal> de comparaison d'une 
     263    valeur boolᅵenne avec <literal>3</literal>). 
    264264   </para> 
    265265 
     
    269269     <primary>between</primary> 
    270270    </indexterm> 
    271     En plus des opérateurs de comparaison, on trouve la construction spéciale 
     271    En plus des opᅵrateurs de comparaison, on trouve la construction spᅵciale 
    272272    <token>BETWEEN</token>. 
    273273<synopsis><replaceable>a</replaceable> BETWEEN <replaceable>x</replaceable> AND <replaceable>y</replaceable></synopsis> 
    274     est équivalent à 
     274    est ᅵquivalent ᅵ 
    275275<synopsis><replaceable>a</replaceable> &gt;= <replaceable>x</replaceable> AND <replaceable>a</replaceable> &lt;= <replaceable>y</replaceable></synopsis> 
    276     De même, 
     276    De mᅵme, 
    277277<synopsis><replaceable>a</replaceable> NOT BETWEEN <replaceable>x</replaceable> AND <replaceable>y</replaceable></synopsis> 
    278     est équivalent à 
     278    est ᅵquivalent ᅵ 
    279279<synopsis><replaceable>a</replaceable> &lt; <replaceable>x</replaceable> OR <replaceable>a</replaceable> &gt; <replaceable>y</replaceable></synopsis> 
    280     Il n'y a pas de différence entre les deux formes respectives si ce n'est 
    281     les cycles <acronym>CPU</acronym> requis pour ré-écrire en interne la 
    282     première sous la forme de la seconde. 
     280    Il n'y a pas de diffᅵrence entre les deux formes respectives si ce n'est 
     281    les cycles <acronym>CPU</acronym> requis pour rᅵ-ᅵcrire en interne la 
     282    premiᅵre sous la forme de la seconde. 
    283283    <indexterm> 
    284284     <primary>BETWEEN SYMMETRIC</primary> 
    285285    </indexterm> 
    286     <token>BETWEEN SYMMETRIC</token> est identique à <literal>BETWEEN</literal> sauf qu'il 
    287     n'est pas nécessaire que l'argument à gauche de <literal>AND</literal> soit plus 
    288     petit ou égal à l'argument à sa droite&nbsp;; la bonne échelle de valeurs 
    289     est déterminée automatiquement. 
     286    <token>BETWEEN SYMMETRIC</token> est identique ᅵ <literal>BETWEEN</literal> sauf qu'il 
     287    n'est pas nᅵcessaire que l'argument ᅵ gauche de <literal>AND</literal> soit plus 
     288    petit ou ᅵgal ᅵ l'argument ᅵ sa droite&nbsp;; la bonne ᅵchelle de valeurs 
     289    est dᅵterminᅵe automatiquement. 
    290290   </para> 
    291291 
     
    303303     <primary>NOTNULL</primary> 
    304304   </indexterm> 
    305     Pour vérifier si une valeur est NULL ou non, on utilise les constructions 
     305    Pour vᅵrifier si une valeur est NULL ou non, on utilise les constructions 
    306306<synopsis><replaceable>expression</replaceable> IS NULL 
    307307<replaceable>expression</replaceable> IS NOT NULL</synopsis> 
    308     ou la construction équivalente, non standard, 
     308    ou la construction ᅵquivalente, non standard, 
    309309<synopsis><replaceable>expression</replaceable> ISNULL 
    310310<replaceable>expression</replaceable> NOTNULL</synopsis> 
     
    313313 
    314314   <para> 
    315     On <emphasis>ne</emphasis> peut <emphasis>pas</emphasis> écrire 
     315    On <emphasis>ne</emphasis> peut <emphasis>pas</emphasis> ᅵcrire 
    316316    <literal><replaceable>expression</replaceable> = NULL</literal> 
    317     parce que <literal>NULL</literal> n'est pas <quote>égal à</quote> 
    318     <literal>NULL</literal> (la valeur NULL représente une valeur inconnue 
    319     et il est impossible de dire si deux valeurs inconnues sont égales). Ce 
     317    parce que <literal>NULL</literal> n'est pas <quote>ᅵgal ᅵ</quote> 
     318    <literal>NULL</literal> (la valeur NULL reprᅵsente une valeur inconnue 
     319    et il est impossible de dire si deux valeurs inconnues sont ᅵgales). Ce 
    320320    comportement est conforme au standard SQL. 
    321321   </para> 
     
    323323   <tip> 
    324324   <para> 
    325     Il se peut que des applications s'attendent à voir  
     325    Il se peut que des applications s'attendent ᅵ voir  
    326326    <literal><replaceable>expression</replaceable> = NULL</literal> 
    327     évaluée à vrai (<foreignphrase>true</foreignphrase>) si <replaceable>expression</replaceable> s'évalue comme 
    328     la valeur NULL. Il est chaudement recommandé que ces applications 
    329     soient modifiées pour se conformer au standard SQL. Néanmoins, si cela 
    330     n'est pas possible, le paramètre de configuration <xref 
    331     linkend="guc-transform-null-equals"/> peut être utilisé. S'il est activé
     327    ᅵvaluᅵe ᅵ vrai (<foreignphrase>true</foreignphrase>) si <replaceable>expression</replaceable> s'ᅵvalue comme 
     328    la valeur NULL. Il est chaudement recommandᅵ que ces applications 
     329    soient modifiᅵes pour se conformer au standard SQL. Nᅵanmoins, si cela 
     330    n'est pas possible, le paramᅵtre de configuration <xref 
     331    linkend="guc-transform-null-equals"/> peut ᅵtre utilisᅵ. S'il est activᅵ
    332332    <productname>PostgreSQL</productname> convertit les clauses <literal>x = 
    333     NULL</literal> en <literal>x IS NULL</literal>. Tel était le comportement par 
    334     défaut dans les versions 6.5 à 7.1 de <productname>PostgreSQL</productname>. 
     333    NULL</literal> en <literal>x IS NULL</literal>. Tel ᅵtait le comportement par 
     334    dᅵfaut dans les versions 6.5 ᅵ 7.1 de <productname>PostgreSQL</productname>. 
    335335   </para> 
    336336   </tip> 
     
    339339   <para> 
    340340    Si l'<replaceable>expression</replaceable> est une valeur de ligne, alors 
    341     <literal>IS NULL</literal> est vrai quand l'expression même de la ligne est 
     341    <literal>IS NULL</literal> est vrai quand l'expression mᅵme de la ligne est 
    342342    NULL ou quand tous les champs de la ligne sont NULL alors que 
    343     <literal>IS NOT NULL</literal> est vrai quand l'expression même de la ligne est 
     343    <literal>IS NOT NULL</literal> est vrai quand l'expression mᅵme de la ligne est 
    344344    non NULL et que tous les champs de la ligne sont non NULL. 
    345     Cette définition, conforme au standard SQL, est un changement du 
    346     comportement incohérent des versions de <productname>PostgreSQL</productname> 
    347     antérieures à la 8.2. 
     345    Cette dᅵfinition, conforme au standard SQL, est un changement du 
     346    comportement incohᅵrent des versions de <productname>PostgreSQL</productname> 
     347    antᅵrieures ᅵ la 8.2. 
    348348   </para> 
    349349  </note> 
     
    356356     <primary>IS NOT DISTINCT FROM</primary> 
    357357   </indexterm> 
    358     L'opérateur standard de comparaison renvoie NULL (ce qui signifie 
    359     <quote>inconnu</quote>) si l'une des entrées est NULL. Une autre façon 
     358    L'opᅵrateur standard de comparaison renvoie NULL (ce qui signifie 
     359    <quote>inconnu</quote>) si l'une des entrᅵes est NULL. Une autre faᅵon 
    360360    d'effectuer les comparaisons utilise la syntaxe <literal>IS <optional>NOT</optional> DISTINCT FROM</literal>&nbsp;: 
    361361<synopsis> 
     
    363363<replaceable>expression</replaceable> IS NOT DISTINCT FROM <replaceable>expression</replaceable> 
    364364</synopsis> 
    365     Pour des entrées non NULL, <literal>IS DISTINCT FROM</literal> est 
    366     identique à l'opérateur <literal>&lt;&gt;</literal>. Cependant, si les deux entrées 
    367     sont NULL, alors cela retourne faux et si une des deux entrées est NULL, 
    368     alors cela retourne vrai. De la même façon, <literal>IS NOT DISTINCT 
    369     FROM</literal> est identique à <literal>=</literal> pour les entrées non NULL 
    370     mais il renvoie true si les deux entrées sont NULL et false quand une seule 
    371     est NULL. Dans ces constructions, NULL n'est plus considéré comme 
    372     un état inconnu mais comme une valeur. 
     365    Pour des entrᅵes non NULL, <literal>IS DISTINCT FROM</literal> est 
     366    identique ᅵ l'opᅵrateur <literal>&lt;&gt;</literal>. Cependant, si les deux entrᅵes 
     367    sont NULL, alors cela retourne faux et si une des deux entrᅵes est NULL, 
     368    alors cela retourne vrai. De la mᅵme faᅵon, <literal>IS NOT DISTINCT 
     369    FROM</literal> est identique ᅵ <literal>=</literal> pour les entrᅵes non NULL 
     370    mais il renvoie true si les deux entrᅵes sont NULL et false quand une seule 
     371    est NULL. Dans ces constructions, NULL n'est plus considᅵrᅵ comme 
     372    un ᅵtat inconnu mais comme une valeur. 
    373373   </para> 
    374374 
     
    392392     <primary>IS NOT UNKNOWN</primary> 
    393393   </indexterm> 
    394     Les valeurs booléennes peuvent aussi être testées en utilisant les 
     394    Les valeurs boolᅵennes peuvent aussi ᅵtre testᅵes en utilisant les 
    395395    constructions 
    396396<synopsis><replaceable>expression</replaceable> IS TRUE 
     
    400400<replaceable>expression</replaceable> IS UNKNOWN 
    401401<replaceable>expression</replaceable> IS NOT UNKNOWN</synopsis> 
    402     Elles retournent toujours true ou false, jamais une valeur NULL, même si 
    403     l'opérande est NULL. Une entrée NULL est traitée comme la valeur logique 
     402    Elles retournent toujours true ou false, jamais une valeur NULL, mᅵme si 
     403    l'opᅵrande est NULL. Une entrᅵe NULL est traitᅵe comme la valeur logique 
    404404    <quote>inconnue</quote>. <literal>IS UNKNOWN</literal> et <literal>IS 
    405     NOT UNKNOWN</literal> sont réellement identiques à <literal>IS NULL</literal> et 
     405    NOT UNKNOWN</literal> sont rᅵellement identiques ᅵ <literal>IS NULL</literal> et 
    406406    <literal>IS NOT NULL</literal>, respectivement, sauf que l'expression en 
    407     entrée doit être de type booléen. 
     407    entrᅵe doit ᅵtre de type boolᅵen. 
    408408   </para> 
    409409  </sect1> 
    410410 
    411411  <sect1 id="functions-math"> 
    412    <title>Fonctions et opérateurs mathématiques</title> 
    413  
    414    <para> 
    415     Des opérateurs mathématiques sont fournis pour un grand nombre de types 
     412   <title>Fonctions et opᅵrateurs mathᅵmatiques</title> 
     413 
     414   <para> 
     415    Des opᅵrateurs mathᅵmatiques sont fournis pour un grand nombre de types 
    416416    <productname>PostgreSQL</productname>. Pour les types sans convention 
    417     mathématique commune à toutes les permutations possibles (les types 
    418     dates/time, par exemple), le comportement réel est décrit dans les 
    419     sections appropriées. 
    420    </para> 
    421  
    422    <para> 
    423     Le <xref linkend="functions-math-op-table"/> affiche les opérateurs 
    424     mathématiques disponibles. 
     417    mathᅵmatique commune ᅵ toutes les permutations possibles (les types 
     418    dates/time, par exemple), le comportement rᅵel est dᅵcrit dans les 
     419    sections appropriᅵes. 
     420   </para> 
     421 
     422   <para> 
     423    Le <xref linkend="functions-math-op-table"/> affiche les opᅵrateurs 
     424    mathᅵmatiques disponibles. 
    425425   </para> 
    426426 
    427427   <table id="functions-math-op-table"> 
    428     <title>Opérateurs mathématiques</title> 
     428    <title>Opᅵrateurs mathᅵmatiques</title> 
    429429 
    430430    <tgroup cols="4"> 
     
    435435     <thead> 
    436436      <row> 
    437        <entry>Opérateur</entry> 
     437       <entry>Opᅵrateur</entry> 
    438438       <entry>Description</entry> 
    439439       <entry>Exemple</entry> 
    440        <entry>Résultat</entry> 
     440       <entry>Rᅵsultat</entry> 
    441441      </row> 
    442442     </thead> 
     
    466466      <row> 
    467467       <entry><literal>/</literal> </entry> 
    468        <entry>division (la division entière tronque les résultats)</entry> 
     468       <entry>division (la division entiᅵre tronque les rᅵsultats)</entry> 
    469469       <entry><literal>4 / 2</literal></entry> 
    470470       <entry><literal>2</literal></entry> 
     
    487487      <row> 
    488488       <entry><literal>|/</literal> </entry> 
    489        <entry>racine carrée</entry> 
     489       <entry>racine carrᅵe</entry> 
    490490       <entry><literal>|/ 25.0</literal></entry> 
    491491       <entry><literal>5</literal></entry> 
     
    508508      <row> 
    509509       <entry><literal>!!</literal> </entry> 
    510        <entry>factoriel (opérateur préfixe)</entry> 
     510       <entry>factoriel (opᅵrateur prᅵfixe)</entry> 
    511511       <entry><literal>!! 5</literal></entry> 
    512512       <entry><literal>120</literal></entry> 
     
    522522      <row> 
    523523       <entry><literal>&amp;</literal> </entry> 
    524        <entry>AND bit à bit</entry> 
     524       <entry>AND bit ᅵ bit</entry> 
    525525       <entry><literal>91 &amp; 15</literal></entry> 
    526526       <entry><literal>11</literal></entry> 
     
    529529      <row> 
    530530       <entry><literal>|</literal> </entry> 
    531        <entry>OR bit à bit</entry> 
     531       <entry>OR bit ᅵ bit</entry> 
    532532       <entry><literal>32 | 3</literal></entry> 
    533533       <entry><literal>35</literal></entry> 
     
    536536      <row> 
    537537       <entry><literal>#</literal> </entry> 
    538        <entry>XOR bit à bit</entry> 
     538       <entry>XOR bit ᅵ bit</entry> 
    539539       <entry><literal>17 # 5</literal></entry> 
    540540       <entry><literal>20</literal></entry> 
     
    543543      <row> 
    544544       <entry><literal>~</literal> </entry> 
    545        <entry>NOT bit à bit</entry> 
     545       <entry>NOT bit ᅵ bit</entry> 
    546546       <entry><literal>~1</literal></entry> 
    547547       <entry><literal>-2</literal></entry> 
     
    550550      <row> 
    551551       <entry><literal>&lt;&lt;</literal> </entry> 
    552        <entry>décalage gauche</entry> 
     552       <entry>dᅵcalage gauche</entry> 
    553553       <entry><literal>1 &lt;&lt; 4</literal></entry> 
    554554       <entry><literal>16</literal></entry> 
     
    557557      <row> 
    558558       <entry><literal>&gt;&gt;</literal> </entry> 
    559        <entry>décalage droit</entry> 
     559       <entry>dᅵcalage droit</entry> 
    560560       <entry><literal>8 &gt;&gt; 2</literal></entry> 
    561561       <entry><literal>2</literal></entry> 
     
    567567 
    568568   <para> 
    569     Les opérateurs bits à bits ne fonctionnent que sur les types de données 
     569    Les opᅵrateurs bits ᅵ bits ne fonctionnent que sur les types de donnᅵes 
    570570    entiers alors que les autres sont disponibles pour tous les types de 
    571     données numériques. Les opérateurs bit par bit sont aussi disponibles pour 
    572     les types de chaînes de bits <type>bit</type> et <type>bit varying</type> 
     571    donnᅵes numᅵriques. Les opᅵrateurs bit par bit sont aussi disponibles pour 
     572    les types de chaᅵnes de bits <type>bit</type> et <type>bit varying</type> 
    573573    comme le montre le <xref linkend="functions-bit-string-op-table"/>. 
    574574   </para> 
     
    576576  <para> 
    577577   Le <xref linkend="functions-math-func-table"/> affiche les fonctions 
    578    mathématiques disponibles. Dans ce tableau, <literal>dp</literal> 
     578   mathᅵmatiques disponibles. Dans ce tableau, <literal>dp</literal> 
    579579   signifie <type>double precision</type>. Beaucoup de ces fonctions sont 
    580    fournies dans de nombreuses formes avec différents types d'argument. 
    581    Sauf lorsque c'est indiqué, toute forme donnée d'une fonction renvoie le 
    582    même type de données que son argument. 
    583    Les fonctions utilisant des données de type <type>double 
    584    precision</type> sont pour la plupart implantées avec la bibliothèque C du 
    585    système hôte&nbsp;; la précision et le comportement dans les cas 
    586    particuliers peuvent varier en fonction du système hôte. 
     580   fournies dans de nombreuses formes avec diffᅵrents types d'argument. 
     581   Sauf lorsque c'est indiquᅵ, toute forme donnᅵe d'une fonction renvoie le 
     582   mᅵme type de donnᅵes que son argument. 
     583   Les fonctions utilisant des donnᅵes de type <type>double 
     584   precision</type> sont pour la plupart implantᅵes avec la bibliothᅵque C du 
     585   systᅵme hᅵte&nbsp;; la prᅵcision et le comportement dans les cas 
     586   particuliers peuvent varier en fonction du systᅵme hᅵte. 
    587587  </para> 
    588588 
     
    646646 
    647647   <table id="functions-math-func-table"> 
    648     <title>Fonctions mathématiques</title> 
     648    <title>Fonctions mathᅵmatiques</title> 
    649649    <tgroup cols="5"> 
    650650     <colspec colnum="1" colwidth="0.7*"/> 
     
    656656      <row> 
    657657       <entry>Fonction</entry> 
    658        <entry>Type renvoyé</entry> 
     658       <entry>Type renvoyᅵ</entry> 
    659659       <entry>Description</entry> 
    660660       <entry>Exemple</entry> 
    661        <entry>Résultat</entry> 
     661       <entry>Rᅵsultat</entry> 
    662662      </row> 
    663663     </thead> 
     
    667667       
    668668<entry><literal><function>abs</function>(<replaceable>x</replaceable>)</literal></entry> 
    669        <entry>(identique à <replaceable>x</replaceable>)</entry> 
     669       <entry>(identique ᅵ <replaceable>x</replaceable>)</entry> 
    670670       <entry>valeur absolue</entry>