root/traduc/branches/bv747/manuel/ref/alter_table.sgml

Revision 104, 18.4 kB (checked in by gleu, 3 years ago)

Des sauts de ligne en trop dans les exemples.

Line 
1 <!--
2 $Header: /var/lib/cvs/pgsql-fr/sgml/ref/alter_table.sgml,v 1.6.2.2 2005/07/03 21:48:01 guillaume Exp $
3 PostgreSQL documentation
4 -->
5
6 <refentry id="SQL-ALTERTABLE">
7  <refmeta>
8   <refentrytitle id="sql-altertable-title">ALTER TABLE</refentrytitle>
9   <refmiscinfo>SQL - Commandes du langage</refmiscinfo>
10  </refmeta>
11
12  <refnamediv>
13   <refname>ALTER TABLE</refname>
14   <refpurpose>change la définition d'une table</refpurpose>
15  </refnamediv>
16
17  <indexterm zone="sql-altertable">
18   <primary>ALTER TABLE</primary>
19  </indexterm>
20
21  <refsynopsisdiv>
22 <synopsis>
23 ALTER TABLE [ ONLY ] <replaceable class="PARAMETER">nom</replaceable> [ * ]
24     ADD [ COLUMN ] <replaceable class="PARAMETER">colonne</replaceable> <replaceable class="PARAMETER">type</replaceable> [ <replaceable class="PARAMETER">contraintedecolonne</replaceable> [ ... ] ]
25 ALTER TABLE [ ONLY ] <replaceable class="PARAMETER">nom</replaceable> [ * ]
26     DROP [ COLUMN ] <replaceable class="PARAMETER">colonne</replaceable> [ RESTRICT | CASCADE ]
27 ALTER TABLE [ ONLY ] <replaceable class="PARAMETER">nom</replaceable> [ * ]
28     ALTER [ COLUMN ] <replaceable class="PARAMETER">colonne</replaceable> { SET DEFAULT <replaceable class="PARAMETER">expression</replaceable> | DROP DEFAULT }
29 ALTER TABLE [ ONLY ] <replaceable class="PARAMETER">nom</replaceable> [ * ]
30     ALTER [ COLUMN ] <replaceable class="PARAMETER">colonne</replaceable> { SET | DROP } NOT NULL
31 ALTER TABLE [ ONLY ] <replaceable class="PARAMETER">nom</replaceable> [ * ]
32     ALTER [ COLUMN ] <replaceable class="PARAMETER">colonne</replaceable> SET STATISTICS <replaceable class="PARAMETER">entier</replaceable>
33 ALTER TABLE [ ONLY ] <replaceable class="PARAMETER">nom</replaceable> [ * ]
34     ALTER [ COLUMN ] <replaceable class="PARAMETER">colonne</replaceable> SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN }
35 ALTER TABLE [ ONLY ] <replaceable class="PARAMETER">nom</replaceable> [ * ]
36     SET WITHOUT OIDS
37 ALTER TABLE [ ONLY ] <replaceable class="PARAMETER">nom</replaceable> [ * ]
38     RENAME [ COLUMN ] <replaceable class="PARAMETER">colonne</replaceable> TO <replaceable
39     class="PARAMETER">nouvellecolonne</replaceable>
40 ALTER TABLE <replaceable class="PARAMETER">nom</replaceable>
41     RENAME TO <replaceable class="PARAMETER">nouveaunom</replaceable>
42 ALTER TABLE [ ONLY ] <replaceable class="PARAMETER">nom</replaceable> [ * ]
43     ADD <replaceable class="PARAMETER">contraintedetable</replaceable>
44 ALTER TABLE [ ONLY ] <replaceable class="PARAMETER">nom</replaceable> [ * ]
45     DROP CONSTRAINT <replaceable class="PARAMETER">nomdecontrainte</replaceable> [ RESTRICT | CASCADE ]
46 ALTER TABLE <replaceable class="PARAMETER">nom</replaceable>
47     OWNER TO <replaceable class="PARAMETER">nouveauproprietaire</replaceable>
48 ALTER TABLE <replaceable class="PARAMETER">nom</replaceable>
49     CLUSTER ON <replaceable class="PARAMETER">nomindex</replaceable>
50 </synopsis>
51  </refsynopsisdiv>
52
53  <refsect1>
54   <title>Description</title>
55
56   <para>
57    <command>ALTER TABLE</command> change la définition d'une table existante.
58    Il existe plusieurs variantes&nbsp;:
59
60   <variablelist>
61    <varlistentry>
62     <term><literal>ADD COLUMN</literal></term>
63     <listitem>
64      <para>
65       Cette variante ajoute une nouvelle colonne à la table en utilisant la même syntaxe que
66        <xref linkend="SQL-CREATETABLE" endterm="SQL-CREATETABLE-TITLE">.
67      </para>
68     </listitem>
69    </varlistentry>
70
71    <varlistentry>
72     <term><literal>DROP COLUMN</literal></term>
73     <listitem>
74      <para>
75       Cette variante supprime une colonne d'une table. Les index et les
76       contraintes de table référençant cette colonne sont automatiquement supprimés.
77       Il faut utiliser l'option <literal>CASCADE</> si certains objets hors
78       de la table dépendent de cette colonne, comme par exemple des références
79       de clés étrangères ou des vues.
80      </para>
81     </listitem>
82    </varlistentry>
83
84    <varlistentry>
85     <term><literal>SET</literal>/<literal>DROP DEFAULT</literal></term>
86     <listitem>
87      <para>
88       Ces variantes ajoutent ou enlèvent des valeurs par défaut pour une colonne.
89       Ces valeurs par défaut ne s'appliquent qu'aux prochaines commandes
90       <command>INSERT</command>. Elles ne modifient pas les lignes déjà
91       présentes dans la table. Des valeurs par défaut peuvent aussi être créées
92       pour les vues. Dans ce cas, elles sont ajoutées aux commandes
93       <command>INSERT</> de la vue avant que la règle
94       <literal>ON INSERT</literal> de la vue ne soit appliquée.
95      </para>
96     </listitem>
97    </varlistentry>
98
99    <varlistentry>
100     <term><literal>SET</literal>/<literal>DROP NOT NULL</literal></term>
101     <listitem>
102      <para>
103       Ces variantes changent le fait que la colonne indique autoriser les
104       valeurs NULL ou non. <literal>SET NOT NULL</> ne peut être utilisé que
105       si la colonne ne contient pas de valeurs NULL.
106      </para>
107     </listitem>
108    </varlistentry>
109
110    <varlistentry>
111     <term><literal>SET STATISTICS</literal></term>
112     <listitem>
113      <para>
114       Cette variante permet de modifier l'objectif de collecte de statistiques
115       par colonne pour les opérations d'analyse
116       (<xref linkend="sql-analyze" endterm="sql-analyze-title">) à venir.
117       L'objectif prend une valeur entre 0 et 1000. Le mettre à -1 pour utiliser
118       l'objectif de statistiques par défaut du système.
119      </para>
120     </listitem>
121    </varlistentry>
122
123    <varlistentry>
124     <term><literal>SET STORAGE</literal></term>
125     <listitem>
126      <para>
127       Ces variantes changent le mode de stockage pour une colonne. Cela permet de
128       contrôler si cette colonne est gardée en ligne dans la table ou bien
129       externalisée dans une table supplémentaire, et si les données doivent
130       être compressées ou non.
131       <literal>PLAIN</literal> doit être utilisé pour les valeurs
132       de longueur fixe, comme les <type>integer</type> et est en ligne non
133       compressé. <literal>MAIN</literal> est pour les données en ligne
134       compressibles. <literal>EXTERNAL</literal> est pour les données externes
135       non compressées. <literal>EXTENDED</literal> est pour les données externes
136       compressées. <literal>EXTENDED</literal> est la valeur par défaut pour tous
137       les types qui le supportent. L'utilisation d'<literal>EXTERNAL</literal>,
138       par exemple, rendra les opérations d'extraction de sous chaînes plus
139       rapides mais utilisera plus d'espace de stockage.
140      
141      </para>
142     </listitem>
143    </varlistentry>
144
145    <varlistentry>
146     <term><literal>SET WITHOUT OIDS</literal></term>
147     <listitem>
148      <para>
149       Cette forme supprime la colonne <literal>oid</literal> de la table.
150       La suppression des OID d'une table n'intervient pas immédiatement.
151       L'espace occupé par l'OID est récupéré lorsque la ligne est mise à jour.
152       Si la ligne n'est pas mise à jour, l'espace utilisé par l'OID et sa
153       valeur est gardé indéfiniment.
154       Cette commande est sémantiquement similaire au processus de suppression
155       de colonne avec <literal>DROP COLUMN</literal>.
156      </para>
157     </listitem>
158    </varlistentry>
159
160    <varlistentry>
161     <term><literal>RENAME</literal></term>
162     <listitem>
163      <para>
164       La variante <literal>RENAME</literal> change le nom d'une table
165       (ou d'un index, d'une séquence, d'une vue) ou le nom d'une colonne
166       de la table. Elle est sans effet sur les données stockées.
167      </para>
168     </listitem>
169    </varlistentry>
170
171    <varlistentry>
172     <term><literal>ADD <replaceable class="PARAMETER">contraintedetable</replaceable></literal></term>
173     <listitem>
174      <para>
175       Cette variante ajoute une nouvelle contrainte à une table en utilisant la
176       même syntaxe que
177       <xref linkend="SQL-CREATETABLE" endterm="SQL-CREATETABLE-TITLE">.
178      </para>
179     </listitem>
180    </varlistentry>
181
182    <varlistentry>
183     <term><literal>DROP CONSTRAINT</literal></term>
184     <listitem>
185      <para>
186       Cette variante supprime des contraintes d'une table.
187       Actuellement,
188       les contraintes n'ont pas nécessairement un nom unique, si bien qu'il
189       peut y avoir plusieurs contraintes qui ont le nom donné en paramètre.
190       Toutes ces contraintes sont supprimées.
191      </para>
192     </listitem>
193    </varlistentry>
194
195    <varlistentry>
196     <term><literal>OWNER</literal></term>
197     <listitem>
198      <para>
199       Cette variante change le propriétaire d'une table, d'un index, d'une
200       séquence, ou d'une vue. Le nouveau propriétaire est celui passé
201       en paramètre.
202      </para>
203     </listitem>
204    </varlistentry>
205
206    <varlistentry>
207     <term><literal>CLUSTER</literal></term>
208     <listitem>
209      <para>
210       Cette variante marque la table pour une future opération de
211       réorganisation en cluster
212       (<xref linkend="SQL-CLUSTER" endterm="sql-cluster-title">).
213      </para>
214     </listitem>
215    </varlistentry>
216
217   </variablelist>
218   </para>
219
220   <para>
221    Il faut être propriétaire de la table pour utiliser <command>ALTER TABLE</>,
222    sauf pour <command>ALTER TABLE OWNER</>, qui ne peut être utilisée que par
223    un super utilisateur.
224   </para>
225  </refsect1>
226
227  <refsect1>
228   <title>Paramètres</title>
229
230     <variablelist>
231
232      <varlistentry>
233       <term><replaceable class="PARAMETER">nom</replaceable></term>
234       <listitem>
235        <para>
236     Le nom (éventuellement précisé par un schéma) d'une table existante,
237     que l'on veut modifier. Si <literal>ONLY</> est indiqué, cette table
238     seulement est modifiée. Si <literal>ONLY</> est absent, alors la table
239     et toutes ses tables filles (s'il y en a) sont modifiées.
240     <literal>*</> peut être ajouté au nom de la table pour indiquer que ses
241     tables descendantes doivent être modifiées. Dans la version courante,
242     c'est le comportement par défaut. Dans les versions antérieures à la
243     7.1, <literal>ONLY</> était le comportement par défaut.
244     Le comportement par défaut peut être modifié en changeant le paramètre
245     de configuration <varname>sql_inheritance</varname>.
246        </para>
247       </listitem>
248      </varlistentry>
249
250      <varlistentry>
251       <term><replaceable class="PARAMETER">colonne</replaceable></term>
252       <listitem>
253        <para>
254     Nom d'une colonne existante ou nouvelle.
255        </para>
256       </listitem>
257      </varlistentry>
258
259      <varlistentry>
260       <term><replaceable class="PARAMETER">type</replaceable></term>
261       <listitem>
262        <para>
263     Type de données de la nouvelle colonne.
264        </para>
265       </listitem>
266      </varlistentry>
267
268      <varlistentry>
269       <term><replaceable class="PARAMETER">nouvellecolonne</replaceable></term>
270       <listitem>
271        <para>
272     Nouveau nom d'une colonne existante.
273        </para>
274       </listitem>
275      </varlistentry>
276
277      <varlistentry>
278       <term><replaceable class="PARAMETER">nouveaunom</replaceable></term>
279       <listitem>
280        <para>
281     Nouveau nom de la table.
282        </para>
283       </listitem>
284      </varlistentry>
285
286      <varlistentry>
287       <term><replaceable class="PARAMETER">contraintedetable</replaceable></term>
288       <listitem>
289        <para>
290     Nouvelle contrainte de table pour la table.
291        </para>
292       </listitem>
293      </varlistentry>
294
295      <varlistentry>
296       <term><replaceable class="PARAMETER">nomdecontrainte</replaceable></term>
297       <listitem>
298        <para>
299     Nom d'une contrainte existante à supprimer
300        </para>
301       </listitem>
302      </varlistentry>
303
304      <varlistentry>
305       <term><replaceable class="PARAMETER">nouveauproprietaire</replaceable></term>
306       <listitem>
307        <para>
308     Nom d'utilisateur du nouveau propriétaire de la table.
309        </para>
310       </listitem>
311      </varlistentry>
312
313      <varlistentry>
314       <term><replaceable class="PARAMETER">nomindex</replaceable></term>
315       <listitem>
316        <para>
317     Nom de l'index sur lequel la table doit être réorganisée en cluster.
318        </para>
319       </listitem>
320      </varlistentry>
321
322      <varlistentry>
323       <term><literal>CASCADE</literal></term>
324       <listitem>
325        <para>
326         Supprime automatiquement les objets qui dépendent de la colonne
327         ou de la contrainte supprimée (par exemple, les vues référençant
328         cette colonne).
329        </para>
330       </listitem>
331      </varlistentry>
332
333      <varlistentry>
334       <term><literal>RESTRICT</literal></term>
335       <listitem>
336        <para>
337         Refuse de supprimer la colonne ou la contrainte s'il y a des
338         objets dépendants. C'est le comportement par défaut.
339        </para>
340       </listitem>
341      </varlistentry>
342
343     </variablelist>
344  </refsect1>
345
346  <refsect1>
347   <title>Notes</title>
348
349    <para>
350     Le mot clé <literal>COLUMN</literal> n'est pas nécessaire. Il peut
351     être omis.
352    </para>
353
354    <para>
355     La version actuelle de <literal>ADD COLUMN</literal> ne permet pas
356     d'utiliser les clauses de valeur par défaut ni de contrainte
357     <literal>NOT NULL</>.
358     La nouvelle colonne a toujours toutes ses valeurs NULL.
359     Il faut utiliser la forme <literal>SET DEFAULT</literal> de
360     <command>ALTER TABLE</command> pour modifier ensuite la valeur par défaut.
361     (Vous voudrez peut-être aussi mettre à jour les lignes existantes de la
362     table avec la nouvelle valeur par défaut en utilisant
363     <xref linkend="sql-update" endterm="sql-update-title">.)
364     Si vous voulez indiquer qu'une colonne n'est jamais nulle, utilisez la
365     variante <literal>SET NOT NULL</> après avoir entré des valeurs non NULL
366     pour cette colonne pour toutes les lignes de la table.
367    </para>
368
369    <para>
370     La forme <literal>DROP COLUMN</literal> ne supprime pas physiquement la
371     colonne, mais la rend simplement invisible au SQL.
372     Par la suite, les ordres d'insertion et de mise à jour sur cette table
373     stockeront une valeur NULL pour la colonne.
374     Du coup, supprimer une colonne ne réduit pas immédiatement la taille de la
375     table sur le disque car l'espace occupé par la colonne n'est pas
376     récupéré. Cet espace sera récupéré petit à petit, au fur et à mesure des
377     mises à jour des lignes de la table.
378     Pour récupérer immédiatement l'espace, il faut faire un faux
379     <command>UPDATE</> sur toutes les lignes de la table, puis la réorganiser
380     avec un vacuum, comme ce qui suit&nbsp;:
381 <programlisting>
382 UPDATE table SET col = col;
383 VACUUM FULL table;
384 </programlisting>
385    </para>
386    
387    <para>
388     Si une table a des tables descendantes, il n'est pas possible d'ajouter
389     ou renommer une colonne dans la table parent sans le faire aussi pour
390     ses descendantes. Donc, la commande <command>ALTER TABLE ONLY</command>
391     est rejetée. Ceci assure que les descendantes ont toujours des colonnes
392     correspondant à celles de la table parente.
393
394    </para>
395
396    <para>
397     Un appel récursif à <literal>DROP COLUMN</literal> supprimera une colonne
398     d'une table descendante si et seulement si la table descendante n'hérite
399     pas de cette colonne d'une autre table et n'a jamais eu de définition
400     indépendante de la colonne.
401     Une suppression de colonne non récursive (c'est à dire une commande
402     <command>ALTER TABLE ONLY ... DROP COLUMN</command>) ne supprime
403     jamais les colonnes descendantes mais les marque comme définies
404     de manière indépendante, plutôt qu'héritées.
405    </para>
406
407    <para>
408     On ne peut pas changer quoi que ce soit dans une table du catalogue
409     système.
410    </para>
411
412    <para>
413     Voir la commande <command>CREATE TABLE</command> pour avoir une
414     description plus complète des paramètres valides.
415     <xref linkend="ddl"> donne plus d'informations sur l'héritage.
416    </para>
417  </refsect1>
418
419  <refsect1>
420   <title>Exemples</title>
421
422   <para>
423    Pour ajouter une colonne de type <type>varchar</type> à une table&nbsp;:
424 <programlisting>
425 ALTER TABLE distributeurs ADD COLUMN adresse varchar(30);
426 </programlisting>
427   </para>
428
429   <para>
430    Pour supprimer une colonne d'une table&nbsp;:
431 <programlisting>
432 ALTER TABLE distributeurs DROP COLUMN adresse RESTRICT;
433 </programlisting>
434   </para>
435
436   <para>
437    Pour renommer une colonne existante&nbsp;:
438 <programlisting>
439 ALTER TABLE distributeurs RENAME COLUMN adresse TO city;
440 </programlisting>
441   </para>
442
443   <para>
444    Pour renommer une table existante&nbsp;:
445 <programlisting>
446 ALTER TABLE distributeurs RENAME TO suppliers;
447 </programlisting>
448   </para>
449
450   <para>
451    Pour ajouter une contrainte NOT NULL à une colonne&nbsp;:
452 <programlisting>
453 ALTER TABLE distributeurs ALTER COLUMN rue SET NOT NULL;
454 </programlisting>
455    Pour supprimer une contrainte NOT NULL d'une colonne&nbsp;:
456 <programlisting>
457 ALTER TABLE distributeurs ALTER COLUMN rue DROP NOT NULL;
458 </programlisting>
459   </para>
460
461   <para>
462    Pour ajouter une contrainte de vérification sur une table&nbsp;:
463 <programlisting>
464 ALTER TABLE distributeurs ADD CONSTRAINT verif_zip CHECK (char_length(zipcode) = 5);
465 </programlisting>
466   </para>
467
468   <para>
469    Pour supprimer une contrainte de vérification d'une table et de toutes ses
470    tables filles&nbsp;:
471 <programlisting>
472 ALTER TABLE distributeurs DROP CONSTRAINT verif_zip;
473 </programlisting>
474   </para>
475
476   <para>
477    Pour ajouter une contrainte de clé étrangère à une table&nbsp;:
478 <programlisting>
479 ALTER TABLE distributeurs ADD CONSTRAINT distfk FOREIGN KEY (adresse) REFERENCES adresses (adresse) MATCH FULL;
480 </programlisting>
481   </para>
482
483   <para>
484    Pour ajouter une contrainte unique (multicolonnes) à une table&nbsp;:
485 <programlisting>
486 ALTER TABLE distributeurs ADD CONSTRAINT dist_id_zipcode_key UNIQUE (dist_id, zipcode);
487 </programlisting>
488   </para>
489
490   <para>
491    Pour ajouter une clé primaire nommée automatiquement à une table.
492    Remarque&nbsp;: une table ne peut avoir qu'une seule clé primaire dans toute
493    sa vie.
494 <programlisting>
495 ALTER TABLE distributeurs ADD PRIMARY KEY (dist_id);
496 </programlisting>
497   </para>
498  </refsect1>
499
500  <refsect1>
501   <title>Compatibilité</title>
502
503   <para>
504    La variante <literal>ADD COLUMN</literal> est conforme au standard SQL,
505    à l'exception du fait qu'elle ne supporte pas les contraintes par défaut
506    et NOT NULL, comme expliqué précédemment.
507    La variante <literal>ALTER COLUMN</literal> est complètement compatible.
508   </para>
509
510   <para>
511    Les clauses pour renommer des tables, des colonnes, des indexes, des vues et
512    des séquences sont des extensions du standard SQL.
513   </para>
514
515   <para>
516    <command>ALTER TABLE DROP COLUMN</> peut être utilisé pour supprimer
517    la seule colonne d'une table, laissant une table sans colonne.
518    C'est une extension de SQL, qui ne permet pas les tables sans colonne.
519   </para>
520  </refsect1>
521 </refentry>
522
523 <!-- Keep this comment at the end of the file
524 Local variables:
525 mode: sgml
526 sgml-omittag:nil
527 sgml-shorttag:t
528 sgml-minimize-attributes:nil
529 sgml-always-quote-attributes:t
530 sgml-indent-step:1
531 sgml-indent-data:t
532 sgml-parent-document:nil
533 sgml-default-dtd-file:"../reference.ced"
534 sgml-exposed-tags:nil
535 sgml-local-catalogs:"/usr/lib/sgml/catalog"
536 sgml-local-ecat-files:nil
537 End:
538 -->
539
Note: See TracBrowser for help on using the browser.