Changeset 635
- Timestamp:
- 04/24/07 09:55:39 (2 years ago)
- Files:
-
- traduc/trunk/manuel/ddl.xml (modified) (16 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
traduc/trunk/manuel/ddl.xml
r634 r635 675 675 <!-- referencing/referenced 676 676 référençant/référencée ? --> 677 <!-- ICI -->678 677 <para> 679 678 Dans cette situation, on dit que la table des commandes est la table … … 1104 1103 1105 1104 <para> 1106 Pour ajouter une colonne, une commande comme celle qui suit peut être 1107 utilisée : 1105 La commande d'ajout d'une colonne ressemble à celle-ci : 1108 1106 <programlisting>ALTER TABLE produits ADD COLUMN description text;</programlisting> 1109 1107 La nouvelle colonne est initialement remplie avec la valeur par défaut … … 1111 1109 </para> 1112 1110 1113 <!--ICI--> 1114 <para> 1115 Vous pouvez aussi définir des contraintes sur la colonne au même moment 1116 en utilisant la syntaxe habituelle : 1111 <para> 1112 Des contraintes de colonne peuvent être définies dans la même commande, 1113 à l'aide de la syntaxe habituelle : 1117 1114 <programlisting>ALTER TABLE produits ADD COLUMN description text CHECK (description <> '');</programlisting> 1118 1115 En fait, toutes les options applicables à la description d'une colonne 1119 dans <command>CREATE TABLE</command> peuvent être utilisées ici. Néanmoins,1120 gardez en têteque la valeur par défaut doit satisfaire les contraintes1121 données. Sinon, <literal>ADD</literal> échouera. Autrement, vous pouvez ajouter1122 les contraintes plus tard (voir ci-dessous) après avoir rempli la nouvelle1123 colonne correctement.1116 dans <command>CREATE TABLE</command> peuvent être utilisées ici. Il ne 1117 faut toutefois pas oublier que la valeur par défaut doit satisfaire les contraintes 1118 données. Dans le cas contraire, <literal>ADD</literal> échoue. Il est 1119 aussi possible d'ajouter les contraintes ultérieurement (voir ci-dessous) après 1120 avoir rempli la nouvelle colonne correctement. 1124 1121 </para> 1125 1122 … … 1128 1125 Ajouter une colonne avec une valeur par défaut nécessite la mise à jour 1129 1126 de chaque ligne de la table pour stocker la valeur de la nouvelle colonne. 1130 Néanmoins, si aucune valeur par défaut n'est spécifiée,1127 Cependant, si aucune valeur par défaut n'est précisée, 1131 1128 <productname>PostgreSQL</productname> peut éviter la mise à jour physique. 1132 Donc, si vous avez l'intention de remplir la colonne avec des valeurs qui1133 ne sont principalement pas celles par défaut, il est préférabled'ajouter1129 Il est, de ce fait, préférable, si la colonne doit être remplie en majorité 1130 avec des valeurs différentes de la valeur par défaut, d'ajouter 1134 1131 la colonne sans valeur par défaut, d'insérer les bonnes valeurs avec une 1135 commande <command>UPDATE</command> ,puis d'ajouter la valeur par défaut désirée1132 commande <command>UPDATE</command> puis d'ajouter la valeur par défaut désirée 1136 1133 comme décrit ci-dessus. 1137 1134 </para> … … 1149 1146 1150 1147 <para> 1151 Pour retirer une colonne, utilisez une commande commecelle-ci :1148 La commande de suppression d'une colonne ressemble à celle-ci : 1152 1149 <programlisting>ALTER TABLE produits DROP COLUMN description;</programlisting> 1153 Les données de cette colonne disparaissent. Les contraintes de table1154 impliquant la colonne sont aussisupprimées. Néanmoins, si la colonne est1155 référencée par une contrainte de clé étrangère d ansune autre table,1156 <productname>PostgreSQL</productname> ne supprime rapas silencieusement1157 cette contrainte. Vous pouvez autoriser la suppression de tout ce qui1158 dépend de la colonne en ajoutant <literal>CASCADE</literal> :1150 Toute donnée dans cette colonne disparaît. Les contraintes de table 1151 impliquant la colonne sont également supprimées. Néanmoins, si la colonne est 1152 référencée par une contrainte de clé étrangère d'une autre table, 1153 <productname>PostgreSQL</productname> ne supprime pas silencieusement 1154 cette contrainte. La suppression de tout ce qui 1155 dépend de la colonne peut être autorisée en ajoutant <literal>CASCADE</literal> : 1159 1156 <programlisting>ALTER TABLE produits DROP COLUMN description CASCADE;</programlisting> 1160 Voir la <xref linkend="ddl-depend"/> pour une description du mécanisme général 1161 derrière ceci. 1157 Voir la <xref linkend="ddl-depend"/> pour une description du mécanisme général. 1162 1158 </para> 1163 1159 </sect2> … … 1177 1173 ALTER TABLE produits ADD CONSTRAINT autre_nom UNIQUE (no_produit); 1178 1174 ALTER TABLE produits ADD FOREIGN KEY (id_groupe_produit) REFERENCES groupes_produits;</programlisting> 1179 Pour ajouter une contrainte nonNULL, qui ne peut pas être écrite1180 sous forme d'une contrainte de table, utilisez cette syntaxe :1175 Pour ajouter une contrainte NOT NULL, qui ne peut pas être écrite 1176 sous forme d'une contrainte de table, la syntaxe suivante est utilisée : 1181 1177 <programlisting>ALTER TABLE produits ALTER COLUMN no_produit SET NOT NULL;</programlisting> 1182 1178 </para> 1183 1179 1184 1180 <para> 1185 La contrainte sera vérifiée immédiatement, doncles données de la1186 table doivent satisfaire la contrainte avant qu'elle soit ajoutée.1181 La contrainte étant immédiatement vérifiée, les données de la 1182 table doivent satisfaire la contrainte avant qu'elle ne soit ajoutée. 1187 1183 </para> 1188 1184 </sect2> 1189 1185 1190 1186 <sect2> 1191 <title> Retirer une contrainte</title>1187 <title>Supprimer une contrainte</title> 1192 1188 1193 1189 <indexterm> … … 1197 1193 1198 1194 <para> 1199 Pour retirer la contrainte, il faut connaître son nom. Si vous lui avez donné1200 un nom, alors c'est facile. Sinon, le système a attribué un nom généré que vous1201 devez découvrir. La commande <literal>\d <replaceable>table</replaceable></literal>1202 de <application>psql</application> peut être utile ici ; d'autres interfaces peuvent1203 aussi donner le moyen d'examiner les détails de table. La commande est :1204 <programlisting>ALTER TABLE produits DROP CONSTRAINT autre_nom;</programlisting> 1205 (si vous traitez avec un nom de contrainte généré comme <literal>$2</literal>, 1206 n'oubliez pas qu'il faudra l'entourer de guillemets double pour en faire1207 un identifiant valable)1208 </para>1209 1210 <para> 1211 Comme avec la suppression d'une colonne, vous avez besoin d'ajouter 1212 <literal>CASCADE</literal> si vous voulez supprimer une contrainte qui dépend 1213 d'autre chose. Un exemple concerne la contrainte de clé étrangère qui 1214 dépend d'une contrainte de clé unique ou primaire sur le(s) colonne(s) 1215 référencée(s).1216 </para> 1217 1218 <para> 1219 Ça fonctionne de la même manière pour toutes les types de contrainte1220 sauf les contraintes non NULL. Pour retirer une contrainte nonNULL,1221 utilisez1195 Pour supprimer une contrainte, il faut connaître son nom. Si elle a été 1196 explicitement nommé, il n'y a aucune difficulté. Dans le cas contraire, 1197 le système a engendré et attribué un nom qu'il faut découvrir. La commande 1198 <literal>\d <replaceable>table</replaceable></literal> 1199 de <application>psql</application> peut être utile ici ; d'autres interfaces 1200 offrent aussi la possibilité d'examiner les détails de table. La commande est : 1201 <programlisting>ALTER TABLE produits DROP CONSTRAINT un_nom;</programlisting> 1202 (Dans le cas d'un nom de contrainte engendré, comme <literal>$2</literal>, 1203 il est nécessaire de l'entourer de guillemets doubles pour en faire 1204 un identifiant valable.) 1205 </para> 1206 1207 <para> 1208 Comme pour la suppression d'une colonne, <literal>CASCADE</literal> peut 1209 être ajouté pour supprimer une contrainte dont dépendent d'autres objets. 1210 Une contrainte de clé étrangère, par exemple, dépend d'une contrainte de 1211 clé primaire ou d'unicité sur la(les) colonne(s) référencée(s). 1212 </para> 1213 1214 <para> 1215 Cela fonctionne de la même manière pour tous les types de contrainte, 1216 à l'exception des contraintes NOT NULL. Pour supprimer une contrainte NOT NULL, 1217 on écrit 1222 1218 <programlisting>ALTER TABLE produits ALTER COLUMN no_produit DROP NOT NULL;</programlisting> 1223 ( Rappelez vous que les contraintes nonNULL n'ont pas de noms.)1219 (Les contraintes NOT NULL n'ont pas de noms.) 1224 1220 </para> 1225 1221 </sect2> … … 1234 1230 1235 1231 <para> 1236 Pour mettre une nouvelle valeur par défaut sur une colonne, utilisez une1237 commande commecelle-ci :1232 La commande de définition d'une nouvelle valeur par défaut de colonne 1233 ressemble à celle-ci : 1238 1234 <programlisting>ALTER TABLE produits ALTER COLUMN prix SET DEFAULT 7.77;</programlisting> 1239 Notez que ceci n'affecte pas les lignes existantes dans la table, cela ne 1240 modifie que la valeur par défaut pour les futures commandes 1241 <command>INSERT</command>. 1242 </para> 1243 1244 <para> 1245 Pour retirer toute valeur par défaut, utilisez 1235 Cela n'affecte pas les lignes existantes de la table, mais uniquement la valeur 1236 par défaut pour les futures commandes <command>INSERT</command>. 1237 </para> 1238 1239 <para> 1240 Pour retirer toute valeur par défaut, on écrit 1246 1241 <programlisting>ALTER TABLE produits ALTER COLUMN prix DROP DEFAULT;</programlisting> 1247 Ceci est équivalent à mettre la valeur par défaut à NULL. En conséquence, 1248 ce n'est pas une erreur de 1249 retirer une valeur par défaut qui n'a pas été définie car la valeur NULL 1250 est la valeur par défaut implicite. 1242 C'est équivalent à mettre la valeur par défaut à NULL. En conséquence, 1243 il n'y a pas d'erreur à retirer une valeur par défaut qui n'a pas été définie 1244 car NULL est la valeur par défaut implicite. 1251 1245 </para> 1252 1246 </sect2> … … 1261 1255 1262 1256 <para> 1263 Pour convertir une colonne en un autre type de données, utilisez une 1264 commande comme ceci : 1257 La commande de conversion du type de données d'une colonne ressemble à celle-ci : 1265 1258 <programlisting>ALTER TABLE produits ALTER COLUMN prix TYPE numeric(10,2);</programlisting> 1266 Elle ne réussira que si chaque valeur dansla colonne peut être1259 Elle ne peut réussir que si chaque valeur de la colonne peut être 1267 1260 convertie dans le nouveau type par une conversion implicite. Si une 1268 conversion plus complexe est nécessaire, vous pouvez ajouterune clause1269 <literal>USING</literal> qui spécifie comment calculer les nouveaux valeurs à1270 partir des anciennes.1261 conversion plus complexe est nécessaire, une clause 1262 <literal>USING</literal> peut être ajoutée qui indique comment calculer 1263 les nouvelles valeurs à partir des anciennes. 1271 1264 </para> 1272 1265 1273 1266 <para> 1274 <productname>PostgreSQL</productname> tente rade convertir la valeur par défaut de la1275 colonne , si elle en a une. Mais ces conversions pourraient échouer ou1276 pourraient produire des résultats surprenants. Il est souvent mieux de1277 s upprimer les contraintes sur une colonne avant de modifier son type, puis1278 d'ajouter les contraintes modifiées convenablement.1267 <productname>PostgreSQL</productname> tente de convertir la valeur par défaut de la 1268 colonne le cas échéant, ainsi que toute contrainte impliquant la colonne. Mais ces 1269 conversions peuvent échouer ou produire des résultats surprenants. Il est 1270 souvent préférable de supprimer les contraintes de la colonne avant d'en 1271 modifier le type, puis d'ajouter ensuite les contraintes convenablement modifiées. 1279 1272 </para> 1280 1273 </sect2> … … 1321 1314 </indexterm> 1322 1315 1323 <para> 1324 Quand vous créez un objet dans la base de données, vous en devenez le 1325 propriétaire. Avec les paramètres par défaut, seul le propriétaire 1326 d'un objet peut faire quelque chose avec. Pour que d'autres utilisateurs 1327 puissent s'en servir, des <firstterm>droits</firstterm> doivent être 1328 accordés (néanmoins, les superutilisateurs ont toujours accès à n'importe 1329 quel objet). 1330 </para> 1331 1332 <para> 1333 Il existe plusieurs droits : <literal>SELECT</literal>, 1316 <!-- privilege : privilège ou droit ? 1317 grant ? --> 1318 <para> 1319 Tout utilisateur qui crée un objet dans la base de données en devient le 1320 propriétaire. Par défaut, seul le propriétaire peut l'utiliser. 1321 Pour que d'autres utilisateurs puissent l'utiliser, des 1322 <firstterm>droits</firstterm> (ou privilèges) doivent être 1323 accordés (les superutilisateurs ont, toutefois, accès à tout objet, 1324 toujours). 1325 </para> 1326 1327 <para> 1328 Il existe un certain nombre de droits différents : <literal>SELECT</literal>, 1334 1329 <literal>INSERT</literal>, <literal>UPDATE</literal>, <literal>DELETE</literal>, 1335 1330 <literal>REFERENCES</literal>, <literal>TRIGGER</literal>, 1336 1331 <literal>CREATE</literal>, <literal>CONNECT</literal>, <literal>TEMPORARY</literal>, 1337 <literal>EXECUTE</literal> ,et <literal>USAGE</literal>.1332 <literal>EXECUTE</literal> et <literal>USAGE</literal>. 1338 1333 Les droits applicables à un objet particulier varient 1339 suivant le type d'objet (table, fonction, etc.) Pour une 1334 selon le type d'objet (table, fonction...). La page de référence 1335 <xref linkend="sql-grant" endterm="sql-grant-title"/> fournit une 1340 1336 information complète sur les différents types de droits gérés par 1341 <productname>PostgreSQL</productname>, lisez la page de référence 1342 <xref linkend="sql-grant" endterm="sql-grant-title"/>. La section et 1343 les chapitres suivants vous montreront aussi comment ces droits 1344 sont utilisés. 1345 </para> 1346 1347 <para> 1348 Le droit de modifier ou de détruire est le droit du propriétaire seul. 1337 <productname>PostgreSQL</productname>. La section et 1338 les chapitres suivants présentent l'utilisation de ces droits. 1339 </para> 1340 1341 <para> 1342 Le droit de modifier ou de détruire un objet est le privilège du seul propriétaire. 1349 1343 </para> 1350 1344 1351 1345 <note> 1352 <para>1353 Pour modifier le propriétaire d'une table, d'un index, d'une séquence ou1354 d'une vue, utilisez la commande <xref linkend="sql-altertable"1355 endterm="sql-altertable-title"/>. Il1356 existe des commandes <literal>ALTER</literal> correspondant auxautres types1357 d'objets.1358 </para>1346 <para> 1347 Pour modifier le propriétaire d'une table, d'un index, d'une séquence ou 1348 d'une vue, on utilise la commande 1349 <xref linkend="sql-altertable" endterm="sql-altertable-title"/>. 1350 Il existe des commandes <literal>ALTER</literal> correspondantes pour les autres types 1351 d'objets. 1352 </para> 1359 1353 </note> 1360 1354 1361 1355 <para> 1362 Pour accorder des droits, la commande <command>GRANT</command> est 1363 utilisée. Par exemple, si <literal>joe</literal> est un utilisateur 1364 existant et <literal>comptes</literal> une table existante, le 1365 droit de mettre la table à jour peut être accordé avec 1356 La commande <command>GRANT</command> est 1357 utilisée pour accorder des privilèges. Par exemple, si <literal>joe</literal> 1358 est un utilisateur et <literal>comptes</literal> une table, le 1359 droit d'actualiser la table <literal>comptes</literal> peut être accordé 1360 à <literal>joe</literal> avec 1366 1361 <programlisting>GRANT UPDATE ON comptes TO joe;</programlisting> 1367 Écrire <literal>ALL</literal> au lieud'un droit spécifique accorde tous1368 les droits a déquats pource type d'objet.1362 Écrire <literal>ALL</literal> à la place d'un droit spécifique accorde tous 1363 les droits applicables à ce type d'objet. 1369 1364 </para> 1370 1365 1371 1366 <para> 1372 1367 Le nom d'<quote>utilisateur</quote> spécial <literal>PUBLIC</literal> peut 1373 être utilisé pour donner un droit à chaque utilisateurdu système. De plus,1368 être utilisé pour donner un droit à tous les utilisateurs du système. De plus, 1374 1369 les rôles de type <quote>group</quote> peuvent être configurés pour aider à 1375 1370 la gestion des droits quand il y a beaucoup d'utilisateurs dans une base … … 1378 1373 1379 1374 <para> 1380 Pour révoquer un droit, utilisez la commande appropriée1381 <command>REVOKE</command> ci-dessous :1375 Pour révoquer un droit, on utilise la commande bien-nommée 1376 <command>REVOKE</command>, comme dans l'exemple ci-dessous : 1382 1377 <programlisting>REVOKE ALL ON comptes FROM PUBLIC;</programlisting> 1383 Les droits spéciaux du propriétaire de l'objet (c'est-à-dire, le droit de faire des 1384 <command>DROP</command>, <command>GRANT</command>, <command>REVOKE</command>, etc.) 1385 sont toujours implicitement ceux du propriétaire et ne peuvent être ni 1378 Les droits spéciaux du propriétaire de l'objet (c'est-à-dire, le droit 1379 d'exécuter <command>DROP</command>, <command>GRANT</command>, 1380 <command>REVOKE</command>, etc.) appartiennent toujours implicitement au 1381 propriétaire. Il ne peuvent être ni 1386 1382 accordés ni révoqués. Mais le propriétaire de l'objet peut choisir 1387 1383 de révoquer ses propres droits ordinaires pour, par exemple, mettre 1388 une table en lecture seule pour soi-même ainsi quepour les autres.1384 une table en lecture seule pour lui-même et pour les autres. 1389 1385 </para> 1390 1386 … … 1392 1388 Habituellement, seul le propriétaire de l'objet (ou un superutilisateur) 1393 1389 peut donner ou révoquer les droits sur un objet. Néanmoins, il est possible 1394 de donner un droit <quote>avec une option de don de droits</quote>, qui donne 1395 à celui qui le reçoit de le donner à d'autres. Si cette option est ensuite 1390 de donner un droit <quote>avec possibilité de transmission</quote> 1391 (<foreignphrase><quote>with grant option</quote></foreignphrase>), qui donne 1392 à celui qui le reçoit la permission de le donner à d'autres. Si cette option est ensuite 1396 1393 révoquée, alors tous ceux qui ont reçu le droit de cet utilisateur 1397 (directement ou indirectement via la chaîne des dons) perdront leur1398 droit. Pour des détails, voir les pages de références <xref1399 linkend="sql-grant" endterm="sql-grant-title"/> et <xref linkend="sql-revoke"1400 endterm="sql-revoke-title"/>.1394 (directement ou indirectement via la chaîne des dons) perdent ce privilège. 1395 Pour les détails, voir les pages de références 1396 <xref linkend="sql-grant" endterm="sql-grant-title"/> et 1397 <xref linkend="sql-revoke" endterm="sql-revoke-title"/>. 1401 1398 </para> 1402 1399 </sect1> … … 1410 1407 1411 1408 <para> 1412 Un groupede bases de données <productname>PostgreSQL</productname>1413 contient une ou plusieurs bases nommées. Les utilisateurs et groupes1414 d'utilisateurs sont partagés sur l e groupe tout entier maisaucune1415 autre donnée n'est partagée parmi les bases. Une connexion cliente1416 donnée sur le serveur peut accéderaux données d'une seule base, celle1417 spécifiée dans la connexion de requête.1409 Un cluster de bases de données <productname>PostgreSQL</productname> 1410 contient une ou plusieurs bases nommées. Si les utilisateurs et groupes 1411 d'utilisateurs sont partagés sur l'ensemble du cluster, aucune 1412 autre donnée n'est partagée. Une connexion cliente 1413 donnée sur le serveur ne peut accéder qu'aux données d'une seule base, celle 1414 indiquée dans la requête de connexion. 1418 1415 </para> 1419 1416 1420 1417 <note> 1421 1418 <para> 1422 Les utilisateurs d'un groupe n'ont pas forcément le droit d'accéder à1423 toutes les bases du groupe. Le partage des noms d'utilisateur veut dire1419 Les utilisateurs d'un cluster n'ont pas obligatoirement le droit d'accéder à 1420 toutes les bases du cluster. Le partage des noms d'utilisateur signifie 1424 1421 qu'il ne peut pas y avoir plusieurs utilisateurs nommés <literal>joe</literal>, 1425 par exemple, dans deux bases du même groupe ; mais le système peut être1426 configuré pour autoriser <literal>joe</literal> à accéder qu'à certaines bases.1422 par exemple, dans deux bases du même cluster ; mais le système peut être 1423 configuré pour n'autoriser <literal>joe</literal> à accéder qu'à certaines bases. 1427 1424 </para> 1428 1425 </note> 1429 1426 1427 <!-- ICI --> 1430 1428 <para> 1431 1429 Une base de données contient un ou plusieurs <firstterm>schémas</firstterm> … … 1436 1434 contenir une table nommée <literal>ma_table</literal>. Contrairement aux 1437 1435 bases de données, les schémas ne sont pas séparés de manière rigide : 1438 un utilisateur peut accéder aux objets de n'importe lequel des schémasde la1439 base de données auxquelsil se connecte s'il a les droits pour le faire.1436 un utilisateur peut accéder aux objets de n'importe quel schéma de la 1437 base de données à laquelle il se connecte s'il a les droits pour le faire. 1440 1438 </para> 1441 1439 … … 1996 1994 Toutes les contraintes de vérification et toutes les contraintes NOT NULL 1997 1995 sur une table parent sont automatiquement héritées par les tables enfants. 1998 Les autres types de contraintes ( uniques, clés primaires, clés étrangères)1996 Les autres types de contraintes (d'unicité, clés primaires, clés étrangères) 1999 1997 ne sont pas hérités. 2000 1998 </para> … … 2084 2082 Si nous déclarons <structname>villes</structname>.<structfield>nom</structfield> comme 2085 2083 <literal>UNIQUE</literal> ou comme une clé primaire (<literal>PRIMARY 2086 KEY</literal>), ce ci2087 n'empêche rapas la table <structname>capitales</structname> d'avoir des lignes2084 KEY</literal>), cela 2085 n'empêche pas la table <structname>capitales</structname> d'avoir des lignes 2088 2086 avec des noms dupliqués dans <structname>villes</structname>. Et ces lignes 2089 2087 dupliquées pourraient par défaut s'afficher dans les requêtes sur 2090 2088 <structname>villes</structname>. En fait, par défaut, 2091 2089 <structname>capitales</structname> n'aurait pas du tout de contrainte 2092 uniqueet, du coup, pourrait contenir plusieurs lignes avec le2090 d'unicité et, du coup, pourrait contenir plusieurs lignes avec le 2093 2091 même nom. Vous pouvez ajouter une contrainte d'unicité à 2094 2092 <structname>capitales</structname> mais ceci n'empêcherait pas la duplication

