| 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 : |
|---|
| 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 : |
|---|
| 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 : |
|---|
| 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 : |
|---|
| 431 |
<programlisting> |
|---|
| 432 |
ALTER TABLE distributeurs DROP COLUMN adresse RESTRICT; |
|---|
| 433 |
</programlisting> |
|---|
| 434 |
</para> |
|---|
| 435 |
|
|---|
| 436 |
<para> |
|---|
| 437 |
Pour renommer une colonne existante : |
|---|
| 438 |
<programlisting> |
|---|
| 439 |
ALTER TABLE distributeurs RENAME COLUMN adresse TO city; |
|---|
| 440 |
</programlisting> |
|---|
| 441 |
</para> |
|---|
| 442 |
|
|---|
| 443 |
<para> |
|---|
| 444 |
Pour renommer une table existante : |
|---|
| 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 : |
|---|
| 452 |
<programlisting> |
|---|
| 453 |
ALTER TABLE distributeurs ALTER COLUMN rue SET NOT NULL; |
|---|
| 454 |
</programlisting> |
|---|
| 455 |
Pour supprimer une contrainte NOT NULL d'une colonne : |
|---|
| 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 : |
|---|
| 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 : |
|---|
| 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 : |
|---|
| 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 : |
|---|
| 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 : 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 |
|
|---|