root/traduc/trunk/postgresql/bki.xml

Revision 1104, 13.0 kB (checked in by gleu, 4 months ago)

Test de commit...sorry

  • Property svn:keywords set to Date Author Revision
Line 
1 <?xml version="1.0" encoding="ISO-8859-15"?>
2 <!-- Dernière modification
3      le       $Date$
4      par      $Author$
5      révision $Revision$ -->
6 <!-- SAS : 20070314 -->
7
8 <chapter id="bki">
9  <title>Interface du moteur, <acronym>BKI</acronym></title>
10
11  <para>
12   Les fichiers d'interface du moteur (<acronym>BKI</acronym> pour
13   <foreignphrase>Backend Interface</foreignphrase>) sont des scripts
14   écrits dans un langage spécial, compris par le serveur
15   <productname>PostgreSQL</productname> lorsqu'il est exécuté en mode
16   <quote>bootstrap</quote>. Ce mode autorise la création et le remplissage des catalogues
17   systèmes <foreignphrase>ab initio</foreignphrase>, là où les commandes SQL
18   exigent leur existence préalable.
19   Les fichiers <acronym>BKI</acronym> peuvent donc être utilisés en premier
20   lieu pour créer le système de base de données. (Ils n'ont probablement
21   pas d'autre utilité.)
22  </para>
23
24  <para>
25   <application>initdb</application> utilise un fichier <acronym>BKI</acronym>
26   pour réaliser une partie de son travail lors de la création d'un nouveau
27   cluster de bases de données. Le fichier d'entrée utilisé par
28   <application>initdb</application> est créé, lors de la construction et de
29   l'installation de <productname>PostgreSQL</productname>, par un programme
30   nommé <filename>genbki.sh</filename> qui lit différents fichiers d'en-têtes
31   C spécialement formatés à partir du répertoire
32   <filename>src/include/catalog</filename> des sources. Le fichier
33   <acronym>BKI</acronym> créé est appelé <filename>postgres.bki</filename> et
34   est normalement installé dans le sous-répertoire <filename>share</filename>
35   du répertoire d'installation.
36  </para>
37
38  <para>
39   D'autres informations sont disponibles dans la documentation
40   d'<application>initdb</application>.
41  </para>
42
43  <sect1 id="bki-format">
44   <title>Format des fichiers <acronym>BKI</acronym></title>
45
46   <para>
47    Cette section décrit l'interprétation des fichiers <acronym>BKI</acronym>
48    par le moteur de <productname>PostgreSQL</productname>. Cette description
49    est plus facile à comprendre si le fichier <filename>postgres.bki</filename>
50    est utilisé comme exemple.
51   </para>
52
53   <para>
54    L'entrée de <acronym>BKI</acronym> représente une séquence de commandes. Les
55    commandes sont constituées de lexèmes
56    (<foreignphrase>tokens</foreignphrase>) dont le nombre dépend de la syntaxe de
57    la commande. Les lexèmes sont habituellement séparés par des espaces
58    fines, mais en l'absence d'ambiguïté ce n'est pas nécessaire. Il n'y a pas
59    de séparateur spécial pour les commandes&nbsp;; le prochain lexème qui ne
60    peut syntaxiquement pas appartenir à la commande qui précède en lance une
61    autre. (En général, il est préférable, pour des raisons de clarté, de
62    placer toute nouvelle commande sur une nouvelle ligne.) Les lexèmes peuvent être
63    des mots clés, des caractères spéciaux (parenthèses, virgules, etc.), nombres ou
64    chaînes de caractères entre guillemets doubles. Tous sont sensibles à la
65    casse.
66   </para>
67
68   <para>
69    Les lignes qui débutent par <literal>#</literal> sont ignorées.
70   </para>
71
72  </sect1>
73
74  <sect1 id="bki-commands">
75   <title>Commandes <acronym>BKI</acronym></title>
76
77   <variablelist>
78    <varlistentry>
79     <term>
80      <literal>create</literal>
81      <optional><literal>bootstrap</literal></optional>
82      <optional><literal>shared_relation</literal></optional>
83      <optional><literal>without_oids</literal></optional>
84      <replaceable class="parameter">tablename</replaceable>
85      <replaceable class="parameter">tableoid</replaceable>
86      (<replaceable class="parameter">name1</replaceable> =
87      <replaceable class="parameter">type1</replaceable>
88      <optional>, <replaceable class="parameter">name2</replaceable> =
89      <replaceable class="parameter">type2</replaceable>, ...</optional>)
90     </term>
91
92     <listitem>
93      <para>
94       Crée une table nommée <replaceable class="parameter">nomtable</replaceable>,
95       possédant l'OID
96       <replaceable class="parameter">tableoid</replaceable> et composée des colonnes
97       données entre parenthèses.
98      </para>
99
100      <para>
101       Les types de colonnes suivants sont supportés directement par
102       <filename>bootstrap.c</filename>: <type>bool</type>,
103       <type>bytea</type>, <type>char</type> (1 byte),
104       <type>name</type>, <type>int2</type>,
105       <type>int4</type>, <type>regproc</type>, <type>regclass</type>,
106       <type>regtype</type>, <type>text</type>,
107       <type>oid</type>, <type>tid</type>, <type>xid</type>,
108       <type>cid</type>, <type>int2vector</type>, <type>oidvector</type>,
109       <type>_int4</type> (array), <type>_text</type> (array),
110       <type>_oid</type> (array), <type>_char</type> (array),
111       <type>_aclitem</type> (array). Bien qu'il soit possible de créer des
112       tables contenant des colonnes d'autres types, cela ne peut pas être
113       réalisé avant que <structname>pg_type</structname> ne soit créé et
114       rempli avec les entrées
115       appropriées. (Ce qui signifie en fait que seuls ces types de colonnes
116       peuvent être utilisés dans les tables utilisant le
117       <quote>bootstrap</quote> mais que les catalogues ne l'utilisant pas
118       peuvent contenir tout type interne.)
119      </para>
120
121      <para>
122       Quand <literal>bootstrap</literal> est précisé, la table est
123       uniquement construite sur disque&nbsp;; rien n'est entré dans
124       <structname>pg_class</structname>, <structname>pg_attribute</structname>,
125       etc, pour cette table. Du coup, la table n'est pas accessible par les
126       opérations SQL standard tant que ces entrées ne sont pas
127       réalisées en dur (à l'aide de commandes <literal>insert</literal>).
128       Cette option est utilisée pour créer <structname>pg_class</structname>, etc.
129      </para>
130
131      <para>
132       La table est créée partagée si <literal>shared_relation</literal> est
133       indiqué. Elle possède des OID à moins que
134       <literal>without_oids</literal> ne soit précisé.
135      </para>
136     </listitem>
137    </varlistentry>
138
139    <varlistentry>
140     <term>
141      <literal>open</literal> <replaceable class="parameter">nomtable</replaceable>
142     </term>
143
144     <listitem>
145      <para>
146       Ouvre la table nommée
147       <replaceable class="parameter">nomtable</replaceable>
148       pour l'ajout de données. Toute table alors ouverte est fermée.
149      </para>
150     </listitem>
151    </varlistentry>
152
153    <varlistentry>
154     <term>
155      <literal>close</literal> <optional><replaceable class="parameter">nomtable</replaceable></optional>
156     </term>
157
158     <listitem>
159      <para>
160       Ferme la table ouverte. Le nom de la
161       table peut-être indiqué pour vérification mais ce n'est pas nécessaire.
162      </para>
163     </listitem>
164    </varlistentry>
165
166    <varlistentry>
167     <term>
168      <literal>insert</literal> <optional><literal>OID =</literal> <replaceable class="parameter">valeur_oid</replaceable></optional> <literal>(</literal><replaceable class="parameter">valeur1</replaceable> <replaceable class="parameter">valeur2</replaceable> ...<literal>)</literal>
169     </term>
170
171     <listitem>
172      <para>
173       Insère une nouvelle ligne dans la table ouverte en utilisant
174       <replaceable class="parameter">valeur1</replaceable>,
175       <replaceable class="parameter">valeur2</replaceable>, etc., comme valeurs de
176       colonnes et <replaceable class="parameter">valeur_oid</replaceable>
177       comme OID. Si
178       <replaceable class="parameter">valeur_oid</replaceable> vaut zéro
179       (0) ou si la clause est omise, et que la table a des OID, alors le
180       prochain OID disponible est utilisé.
181      </para>
182
183      <para>
184       La valeur NULL peut être indiquée en utilisant le mot clé spécial
185       <literal>_null_</literal>. Les valeurs contenant des espaces doivent être
186       placées entre des guillemets doubles.
187      </para>
188     </listitem>
189    </varlistentry>
190
191    <varlistentry>
192     <term>
193      <literal>declare</literal> <optional><literal>unique</literal></optional>
194      <literal>index</literal> <replaceable class="parameter">nomindex</replaceable>
195      <replaceable class="parameter">oidindex</replaceable>
196      <literal>on</literal> <replaceable class="parameter">nomtable</replaceable>
197      <literal>using</literal> <replaceable class="parameter">nomam</replaceable>
198      <literal>(</literal> <replaceable class="parameter">classeop1</replaceable>
199      <replaceable class="parameter">nom1</replaceable>
200      <optional>, ...</optional> <literal>)</literal>
201     </term>
202
203     <listitem>
204      <para>
205       Crée un index nommé
206       <replaceable class="parameter">nomindex</replaceable>, d'OID
207       <replaceable class="parameter">indexoid</replaceable>, sur la table nommée
208       <replaceable class="parameter">nomtable</replaceable> en utilisant la
209       méthode d'accès nommée <replaceable class="parameter">nomam</replaceable>.
210       Les champs à indexer sont appelés
211       <replaceable class="parameter">nom1</replaceable>,
212       <replaceable class="parameter">nom2</replaceable> etc., et les classes d'opérateur à
213       utiliser sont respectivement
214       <replaceable class="parameter">classeop1</replaceable>,
215       <replaceable class="parameter">classeop2</replaceable> etc.
216       Le fichier index est créé et les entrées appropriées du catalogue sont
217       ajoutées pour lui, mais le contenu de l'index n'est pas initialisé par
218       cette commande.
219      </para>
220     </listitem>
221    </varlistentry>
222
223    <varlistentry>
224     <term>
225      <literal>declare toast</literal>
226      <replaceable class="parameter">toasttableoid</replaceable>
227      <replaceable class="parameter">toastindexoid</replaceable>
228      <literal>on</literal> <replaceable class="parameter">nomtable</replaceable>
229     </term>
230
231     <listitem>
232      <para>
233       Crée une table TOAST pour la table nommée
234       <replaceable class="parameter">nomtable</replaceable>.
235       La table TOAST se voit affecter l'OID
236       <replaceable class="parameter">toasttableoid</replaceable>
237       et son index l'OID
238       <replaceable class="parameter">toastindexoid</replaceable>.
239       Comme avec <literal>declare index</literal>, le remplissage de l'index
240       est reporté.
241      </para>
242     </listitem>
243    </varlistentry>
244
245    <varlistentry>
246     <term><literal>build indices</literal></term>
247
248     <listitem>
249      <para>
250       Remplit les index précédemment déclarés.
251      </para>
252     </listitem>
253    </varlistentry>
254   </variablelist>
255
256  </sect1>
257
258  <sect1 id="bki-structure">
259   <title>Structure du fichier <acronym>BKI</acronym> de <quote>bootstrap</quote></title>
260
261   <para>
262    La commande <literal>open</literal> ne peut pas être utilisée avant que les
263    tables qu'elle utilise n'existent et n'aient des entrées pour la table à
264    ouvrir. (Ces tables minimales sont <structname>pg_class</structname>,
265    <structname>pg_attribute</structname>, <structname>pg_proc</structname> et
266    <structname>pg_type</structname>.) Pour permettre le remplissage de ces
267    tables elles-mêmes,
268    <literal>create</literal> utilisé avec l'option <literal>bootstrap</literal>
269    ouvre implicitement la table créée pour l'insertion de données.
270   </para>
271
272   <para>
273    De la même façon, les commandes <literal>declare index</literal> et
274    <literal>declare toast</literal> ne peuvent pas être utilisées tant que
275    les catalogues systèmes dont elles ont besoin n'ont pas été créés et remplis.
276   </para>
277
278   <para>
279    Du coup, la structure du fichier <filename>postgres.bki</filename> doit
280    être&nbsp;:
281    <orderedlist>
282     <listitem>
283      <para>
284       <literal>create bootstrap</literal> une des tables critiques
285      </para>
286     </listitem>
287     <listitem>
288      <para>
289       <literal>insert</literal> les données décrivant au moins les tables critiques
290      </para>
291     </listitem>
292     <listitem>
293      <para>
294       <literal>close</literal>
295      </para>
296     </listitem>
297     <listitem>
298      <para>
299       Répéter pour les autres tables critiques.
300      </para>
301     </listitem>
302     <listitem>
303      <para>
304       <literal>create</literal> (sans <literal>bootstrap</literal>) une table non critique
305      </para>
306     </listitem>
307     <listitem>
308      <para>
309       <literal>open</literal>
310      </para>
311     </listitem>
312     <listitem>
313      <para>
314       <literal>insert</literal> les données souhaitées
315      </para>
316     </listitem>
317     <listitem>
318      <para>
319       <literal>close</literal>
320      </para>
321     </listitem>
322     <listitem>
323      <para>
324       Répéter pour les autres tables non critiques.
325      </para>
326     </listitem>
327     <listitem>
328      <para>
329       Définir les index et les tables TOAST.
330      </para>
331     </listitem>
332     <listitem>
333      <para>
334       <literal>build indices</literal>
335      </para>
336     </listitem>
337    </orderedlist>
338   </para>
339
340   <para>
341    Il existe, sans doute, d'autres dépendances d'ordre non documentées.
342   </para>
343  </sect1>
344
345  <sect1 id="bki-example">
346   <title>Exemple</title>
347
348  <para>
349    La séquence de commandes suivante crée la table
350    <literal>test_table</literal> avec l'OID 420, deux colonnes
351    <literal>cola</literal> et <literal>colb</literal> de types respectifs
352    <type>int4</type> et <type>text</type> et insère deux lignes dans la
353    table&nbsp;:
354 <programlisting>create test_table 420 (cola = int4, colb = text)
355 open test_table
356 insert OID=421 ( 1 "value1" )
357 insert OID=422 ( 2 _null_ )
358 close test_table
359 </programlisting>
360   </para>
361  </sect1>
362 </chapter>
Note: See TracBrowser for help on using the browser.