| 39 | | Pour l'utiliser, créez un trigger <literal>BEFORE INSERT OR UPDATE</literal> |
|---|
| 40 | | en utilisant cette fonction sur une table référençant une autre table. |
|---|
| 41 | | Spécifiez les arguments du trigger : le nom de la colonne de |
|---|
| 42 | | référence de la table qui forme la clé étrangère, le nom de la table |
|---|
| 43 | | référencée et le nom de la colonne pour la table référencée qui forme la |
|---|
| | 39 | Pour l'utiliser, on crée un déclencheur <literal>BEFORE INSERT OR UPDATE</literal> |
|---|
| | 40 | qui utilise cette fonction sur une table référençant une autre table. |
|---|
| | 41 | En arguments du déclencheur, on trouve : le nom de la colonne |
|---|
| | 42 | de la table référençant qui forme la clé étrangère, le nom de la table |
|---|
| | 43 | référencée et le nom de la colonne de la table référencée qui forme la |
|---|
| 50 | | Pour l'utiliser, créez un trigger <literal>BEFORE DELETE OR UPDATE</literal> |
|---|
| 51 | | en utilisant cette fonction sur une table référencée par d'autres tables. |
|---|
| 52 | | Spécifiez les arguments du trigger : nombre de tables référantes pour |
|---|
| 53 | | lesquelles la fonction va réaliser la vérification, l'action si une clé |
|---|
| | 50 | Pour l'utiliser, on crée un déclencheur <literal>BEFORE DELETE OR UPDATE</literal> |
|---|
| | 51 | qui utilise cette fonction sur une table référencée par d'autres tables. |
|---|
| | 52 | En arguments du déclencheur, on trouve : le nombre de tables référençant pour |
|---|
| | 53 | lesquelles la fonction réalise la vérification, l'action à exécuter si une clé |
|---|
| 55 | | une ligne référante, <literal>restrict</literal> — pour annuler la |
|---|
| 56 | | transaction si des clés référantes existent, <literal>setnull</literal> |
|---|
| 57 | | — pour initialiser les champs des clés référantes à NULL), les noms |
|---|
| 58 | | des colonnes de la table contenant le trigger, colonnes qui forment une |
|---|
| 59 | | clé primaire/unique, puis le nom de la table référante et les noms des |
|---|
| 60 | | colonnes (répété pour toutes les tables référantes le nombre de fois |
|---|
| 61 | | spécifié par le premier argument). Notez que les colonnes de clé |
|---|
| 62 | | primaire/unique devraient être marquées NOT NULL et devraient avoir un |
|---|
| 63 | | index unique. |
|---|
| | 55 | une ligne qui référence, <literal>restrict</literal> — pour annuler la |
|---|
| | 56 | transaction si des clés de référence existent, <literal>setnull</literal> |
|---|
| | 57 | — pour initialiser les champs des clés référençant à NULL), les noms |
|---|
| | 58 | des colonnes de la table surveillées par le déclencheur, colonnes qui |
|---|
| | 59 | forment la clé primaire/unique, puis le nom de la table référençant et les noms des |
|---|
| | 60 | colonnes (répétés pour autant de tables référençant que cela est précisé par |
|---|
| | 61 | le premier argument). Les colonnes de clé |
|---|
| | 62 | primaire/unique doivent être marquées NOT NULL et posséder un index |
|---|
| | 63 | d'unicité. |
|---|
| 93 | | Les colonnes peuvent être nommées comme vous le voulez, mais dans ce |
|---|
| 94 | | chapitre, nous les appelerons start_date et stop_date. |
|---|
| 95 | | </para> |
|---|
| 96 | | |
|---|
| 97 | | <para> |
|---|
| 98 | | Quand une nouvelle ligne est insérée, start_date doit normalement |
|---|
| 99 | | être initialisée avec l'heure actuelle et stop_date doit valoir |
|---|
| 100 | | <literal>infinity</literal>. Le trigger substituera automatiquement ces |
|---|
| 101 | | valeurs si la donnée insérée contient des NULL dans ces colonnes. |
|---|
| 102 | | Généralement, insérer des données explicites non NULL dans ces colonnes |
|---|
| 103 | | ne sera fait qu'au chargement de données sauvegardées. |
|---|
| 104 | | </para> |
|---|
| 105 | | |
|---|
| 106 | | <para> |
|---|
| 107 | | Les lignes avec stop_date égales à <literal>infinity</literal> sont des |
|---|
| | 93 | Le nom des colonnes n'a aucune importance, mais dans ce |
|---|
| | 94 | chapitre, elles sont nommées start_date et stop_date. |
|---|
| | 95 | </para> |
|---|
| | 96 | |
|---|
| | 97 | <para> |
|---|
| | 98 | À l'insertion d'une nouvelle ligne, start_date doit normalement |
|---|
| | 99 | être initialisée à l'heure courante et stop_date à |
|---|
| | 100 | <literal>infinity</literal>. Le déclencheur substitue automatiquement ces |
|---|
| | 101 | valeurs si les données insérées sont NULL pour ces colonnes. |
|---|
| | 102 | L'insertion de données explicitement non-NULL dans ces colonnes n'intervient |
|---|
| | 103 | qu'au rechargement de données sauvegardées. |
|---|
| | 104 | </para> |
|---|
| | 105 | |
|---|
| | 106 | <para> |
|---|
| | 107 | Les lignes pour lesquelles stop_date vaut <literal>infinity</literal> sont des |
|---|
| 109 | | Les lignes avec un stop_date fini ne peuvent plus être modifiées — |
|---|
| 110 | | le trigger les protège. (si vous avez besoin de les modifier, vous |
|---|
| 111 | | pouvez désactiver le voyage dans le temps comme indiqué ci-dessous.) |
|---|
| 112 | | </para> |
|---|
| 113 | | |
|---|
| 114 | | <para> |
|---|
| 115 | | Pour une ligne modifiable, en cas de mise à jour, seul stop_date sera |
|---|
| 116 | | modifié (à l'heure actuelle) et une nouvelle ligne avec la donnée modifiée |
|---|
| 117 | | sera insérée. Start_date dans cette nouvelle ligne sera initialisée avec |
|---|
| 118 | | l'heure courante et stop_date vaudra <literal>infinity</literal>. |
|---|
| 119 | | </para> |
|---|
| 120 | | |
|---|
| 121 | | <para> |
|---|
| 122 | | Une suppression ne supprime pas réellement la ligne mais initialise |
|---|
| 123 | | stop_date à l'heure actuelle. |
|---|
| 124 | | </para> |
|---|
| 125 | | |
|---|
| 126 | | <para> |
|---|
| 127 | | Pour trouver les lignes <quote>actuellement valides</quote>, ajoutez la |
|---|
| | 109 | Les lignes dont stop_date est fini ne peuvent plus être modifiées — |
|---|
| | 110 | le déclencheur les protège. (Pour les modifier, il est nécessaire de |
|---|
| | 111 | désactiver le voyage dans le temps comme indiqué ci-dessous.) |
|---|
| | 112 | </para> |
|---|
| | 113 | |
|---|
| | 114 | <para> |
|---|
| | 115 | Pour une ligne modifiable, en mise à jour, seul stop_date est |
|---|
| | 116 | modifié (positionné à l'heure courante) et une nouvelle ligne avec la donnée modifiée |
|---|
| | 117 | est insérée. Pour cette nouvelle ligne, start_date est positionné à |
|---|
| | 118 | l'heure courante et stop_date à <literal>infinity</literal>. |
|---|
| | 119 | </para> |
|---|
| | 120 | |
|---|
| | 121 | <para> |
|---|
| | 122 | Une suppression ne supprime pas réellement la ligne mais positionne |
|---|
| | 123 | stop_date à l'heure courante. |
|---|
| | 124 | </para> |
|---|
| | 125 | |
|---|
| | 126 | <para> |
|---|
| | 127 | Pour trouver les lignes <quote>actuellement valides</quote>, on ajoute la |
|---|
| 136 | | <function>timetravel()</function> est la fonction trigger généraliste qui |
|---|
| 137 | | supporte ce comportement. Créez un trigger <literal>BEFORE INSERT OR UPDATE |
|---|
| 138 | | OR DELETE</literal> utilisant cette fonction pour chaque table pour laquelle |
|---|
| 139 | | la fonctionnalité de voyage dans le temps est activée. Spécifiez deux |
|---|
| 140 | | arguments pour le trigger : les noms réels des colonnes start_date et |
|---|
| 141 | | stop_date. En option, vous pouvez spécifier entre un et trois arguments |
|---|
| 142 | | supplémentaires qui doivent faire référence aux colonnes de type |
|---|
| 143 | | <type>text</type>. Le trigger stockera le nom de l'utilisation courant |
|---|
| | 136 | <function>timetravel()</function> est la fonction déclencheur générique |
|---|
| | 137 | associée à ce fonctionnement. |
|---|
| | 138 | On crée un déclencheur <literal>BEFORE INSERT OR UPDATE |
|---|
| | 139 | OR DELETE</literal> qui utilise cette fonction pour chaque table sur laquelle |
|---|
| | 140 | la fonctionnalité de voyage dans le temps est activée. Le déclencheur |
|---|
| | 141 | accepte deux arguments : les noms réels des colonnes start_date et |
|---|
| | 142 | stop_date. La fonction accepte jusqu'à trois arguments optionnels |
|---|
| | 143 | qui doivent faire référence à des colonnes de type |
|---|
| | 144 | <type>text</type>. Le déclencheur stocke le nom de l'utilisateur courant |
|---|
| 145 | | d'un UPDATE et dans la troisième pour un DELETE. |
|---|
| 146 | | </para> |
|---|
| 147 | | |
|---|
| 148 | | <para> |
|---|
| 149 | | <function>set_timetravel()</function> vous permet d'activer et de |
|---|
| 150 | | désactiver la fonctionnalité du voyage dans le temps pour une table. |
|---|
| 151 | | <literal>set_timetravel('ma_table', 1)</literal> l'activera pour la table |
|---|
| | 146 | d'un UPDATE et dans la troisième lors un DELETE. |
|---|
| | 147 | </para> |
|---|
| | 148 | |
|---|
| | 149 | <para> |
|---|
| | 150 | <function>set_timetravel()</function> permet d'activer et de |
|---|
| | 151 | désactiver la fonctionnalité de voyage dans le temps pour une table. |
|---|
| | 152 | <literal>set_timetravel('ma_table', 1)</literal> l'active pour la table |
|---|
| 156 | | désactivée, vous pouvez modifier librement les colonnes start_date et |
|---|
| 157 | | stop_date. Notez que le statut activé/désactivé est local à la session |
|---|
| 158 | | de la base — les nouvelles commenceront toujours avec cette |
|---|
| 159 | | fonctionnalité activée pour toutes les tables. |
|---|
| | 157 | désactivée, les colonnes start_date et stop_date peuvent être librement |
|---|
| | 158 | modifiées. Le statut actif/inactif est local à la session |
|---|
| | 159 | courante — toute session commence avec cette |
|---|
| | 160 | fonctionnalité activée sur toutes les tables. |
|---|
| 177 | | <function>autoinc()</function> est un trigger qui stocke la prochaine valeur |
|---|
| 178 | | d'une séquence dans un champ de type integer. Ceci est en partie couvert |
|---|
| 179 | | par la fonctionnalité interne de la colonne <quote>serial</quote>, mais |
|---|
| 180 | | n'est pas strictement identique : <function>autoinc()</function> |
|---|
| 181 | | surchargera les tentatives de substituer une valeur différente pour ce |
|---|
| 182 | | champ lors des insertions et, en option, il peut aussi être utilisé pour |
|---|
| | 178 | <function>autoinc()</function> est un déclencheur qui stocke la prochaine valeur |
|---|
| | 179 | d'une séquence dans un champ de type integer. Cela recouvre quelque peu |
|---|
| | 180 | la fonctionnalité interne de la colonne <quote>serial</quote>, mais |
|---|
| | 181 | ce n'est pas strictement identique : <function>autoinc()</function> |
|---|
| | 182 | surcharge les tentatives de substitution d'une valeur différente pour ce |
|---|
| | 183 | champ lors des insertions et, optionnellement, peut aussi être utilisé pour |
|---|
| 187 | | Pour l'utiliser, créez un trigger <literal>BEFORE INSERT</literal> (ou |
|---|
| 188 | | en option <literal>BEFORE INSERT OR UPDATE</literal>) en utilisant cette |
|---|
| 189 | | fonction. Spécifiez deux arguments pour le trigger : le nom de la |
|---|
| 190 | | colonne de type integer à modifier, et le nom de la séquence qui fournira |
|---|
| 191 | | les valeurs. (En fait, vous pouvez spécifier plusieurs paires de noms si |
|---|
| 192 | | vous voulez mettre à jour plus d'une colonne.) |
|---|
| 193 | | </para> |
|---|
| 194 | | |
|---|
| 195 | | <para> |
|---|
| 196 | | Il existe un exemple dans <filename>autoinc.example</filename>. |
|---|
| | 188 | Pour l'utiliser, on crée un déclencheur <literal>BEFORE INSERT</literal> (ou |
|---|
| | 189 | en option <literal>BEFORE INSERT OR UPDATE</literal>) qui utilise cette |
|---|
| | 190 | fonction. Le déclencheur accepte deux arguments : le nom de la |
|---|
| | 191 | colonne de type integer à modifier et le nom de la séquence qui fournit |
|---|
| | 192 | les valeurs. (En fait, plusieurs paires de noms peuvent être indiquées pour |
|---|
| | 193 | actualiser plusieurs colonnes.) |
|---|
| | 194 | </para> |
|---|
| | 195 | |
|---|
| | 196 | <para> |
|---|
| | 197 | Un exemple est fourni dans <filename>autoinc.example</filename>. |
|---|
| 213 | | Pour l'utiliser, créez un trigger <literal>BEFORE INSERT</literal> et/ou |
|---|
| 214 | | <literal>UPDATE</literal> en utilisant cette fonction. Le seul argument |
|---|
| 215 | | du trigger correspond au nom de la colonne texte à modifier. |
|---|
| 216 | | </para> |
|---|
| 217 | | |
|---|
| 218 | | <para> |
|---|
| 219 | | Il existe un exemple dans <filename>insert_username.example</filename>. |
|---|
| | 214 | Pour l'utiliser, on crée un déclencheur <literal>BEFORE INSERT</literal> et/ou |
|---|
| | 215 | <literal>UPDATE</literal> qui utilise cette fonction. Le déclencheur prend |
|---|
| | 216 | pour seul argument le nom de la colonne texte à modifier. |
|---|
| | 217 | </para> |
|---|
| | 218 | |
|---|
| | 219 | <para> |
|---|
| | 220 | Un exemple est fourni dans <filename>insert_username.example</filename>. |
|---|
| 231 | | <type>timestamp</type>. Ceci peut être utile pour savoir quand a eu lieu la |
|---|
| 232 | | dernière modification pour une ligne particulière d'une table. |
|---|
| 233 | | </para> |
|---|
| 234 | | |
|---|
| 235 | | <para> |
|---|
| 236 | | Pour l'utiliser, créez un trigger <literal>BEFORE UPDATE</literal> en |
|---|
| 237 | | utilisant cette fonction. Le seul argument de ce trigger correspond au |
|---|
| | 232 | <type>timestamp</type>. C'est utile pour savoir quand a eu lieu la |
|---|
| | 233 | dernière modification sur une ligne particulière d'une table. |
|---|
| | 234 | </para> |
|---|
| | 235 | |
|---|
| | 236 | <para> |
|---|
| | 237 | Pour l'utiliser, on crée un déclencheur <literal>BEFORE UPDATE</literal> qui |
|---|
| | 238 | utilise cette fonction. Le déclencheur prend pour seul argument le |
|---|