Documentation PostgreSQL 15.15 » Annexes » Modules supplémentaires fournis » spi

Précédent | Niveau supérieur | Suivant
F.40. sepgsql | Sommaire | F.42. sslinfo

## F.41. spi

Le module spi fournit plusieurs exemples fonctionnels d'utilisation de l'interface de programmation du serveur (Server Programming Interface) (SPI) et des triggers. Bien que ces fonctions aient un intérêt certain, elles sont encore plus utiles en tant qu'exemples à modifier pour atteindre ses propres buts. Les fonctions sont suffisamment généralistes pour être utilisées avec une table quelconque, mais la création d'un trigger impose que les noms des tables et des champs soient précisés (comme cela est décrit ci-dessous).

Chaque groupe de fonctions décrit ci-dessous est fourni comme une extension installable séparément.

### F.41.1. refint -- fonctions de codage de l'intégrité référentielle

`check_primary_key()` et `check_foreign_key()` sont utilisées pour vérifier les contraintes de clé étrangère. (Cette fonctionnalité est dépassée depuis longtemps par le mécanisme interne, mais le module conserve un rôle d'exemple.)

`check_primary_key()` vérifie la table de référence. Pour l'utiliser, on crée un trigger `BEFORE INSERT OR UPDATE` qui utilise cette fonction sur une table référençant une autre table. En arguments du trigger, on trouve : le nom de la colonne de la table référençant qui forme la clé étrangère, le nom de la table référencée et le nom de la colonne de la table référencée qui forme la clé primaire/unique. Il peut y avoir plusieurs colonnes. Pour gérer plusieurs clés étrangères, on crée un trigger pour chaque référence.

`check_foreign_key()` vérifie la table référencée. Pour l'utiliser, on crée un trigger `BEFORE DELETE OR UPDATE` qui utilise cette fonction sur une table référencée par d'autres tables. En arguments du trigger, on trouve : le nombre de tables référençant pour lesquelles la fonction réalise la vérification, l'action à exécuter si une clé de référence est trouvée (`cascade` -- pour supprimer une ligne qui référence, `restrict` -- pour annuler la transaction si des clés de référence existent, `setnull` -- pour initialiser les champs des clés référençant à NULL), les noms des colonnes de la table surveillées par le trigger, colonnes qui forment la clé primaire/unique, puis le nom de la table référençant et les noms des colonnes (répétés pour autant de tables référençant que cela est précisé par le premier argument). Les colonnes de clé primaire/unique doivent être marquées NOT NULL et posséder un index d'unicité.

Il y a des exemples dans `refint.example`.

### F.41.2. autoinc -- fonctions pour l'incrémentation automatique d'un champ

`autoinc()` est un trigger qui stocke la prochaine valeur d'une séquence dans un champ de type integer. Cela recouvre quelque peu la fonctionnalité interne de la colonne « serial », mais ce n'est pas strictement identique : `autoinc()` surcharge les tentatives de substitution d'une valeur différente pour ce champ lors des insertions et, optionnellement, peut aussi être utilisé pour incrémenter le champ lors des mises à jour.

Pour l'utiliser, on crée un trigger `BEFORE INSERT` (ou en option `BEFORE INSERT OR UPDATE`) qui utilise cette fonction. Le trigger accepte deux arguments : le nom de la colonne de type integer à modifier et le nom de la séquence qui fournit les valeurs. (En fait, plusieurs paires de noms peuvent être indiquées pour actualiser plusieurs colonnes.)

Un exemple est fourni dans `autoinc.example`.

### F.41.3. insert_username -- fonctions pour tracer les utilisateurs qui ont modifié une table

`insert_username()` est un trigger qui stocke le nom de l'utilisateur courant dans un champ texte. C'est utile pour savoir quel est le dernier utilisateur à avoir modifié une ligne particulière d'une table.

Pour l'utiliser, on crée un trigger `BEFORE INSERT` et/ou `UPDATE` qui utilise cette fonction. Le trigger prend pour seul argument le nom de la colonne texte à modifier.

Un exemple est fourni dans `insert_username.example`.

### F.41.4. moddatetime -- fonctions pour tracer la date et l'heure de la dernière modification

`moddatetime()` est un trigger qui stocke la date et l'heure de la dernière modification dans un champ de type `timestamp`. C'est utile pour savoir quand a eu lieu la dernière modification sur une ligne particulière d'une table.

Pour l'utiliser, on crée un trigger `BEFORE UPDATE` qui utilise cette fonction. Le trigger prend pour seul argument le nom de la colonne de type à modifier. La colonne doit être de type `timestamp` ou `timestamp with time zone`.

Un exemple est fourni dans `moddatetime.example`.