Chapitre 33. Extension de SQL

Table des matières
33.1. Comment fonctionne l'extensibilité
33.2. Système de typage de PostgreSQL
33.2.1. Types et fonctions polymorphes
33.2.2. Types de base
33.2.3. Types composites
33.2.4. Domaines
33.2.5. Pseudo-Types
33.2.6. Types polymorphiques
33.3. Fonctions définies par l'utilisateur
33.4. Fonctions en langage de requêtes (SQL)
33.4.1. Fonctions SQL sur les types de base
33.4.2. Fonctions SQL sur les types composites
33.4.3. Fonctions SQL comme sources de table
33.4.4. Fonctions SQL renvoyant un ensemble
33.4.5. Fonctions SQL polymorphes
33.5. Fonctions en langage de procédures
33.6. Fonctions internes
33.7. Fonctions en langage C
33.7.1. Chargement dynamique
33.7.2. Types de base dans les fonctions en langage C
33.7.3. Conventions d'appel de la version 0 pour les fonctions en langage C
33.7.4. Conventions d'appel de la version 1 pour les fonctions en langage C
33.7.5. Écriture du code
33.7.6. Compiler et lier des fonctions chargées dynamiquement
33.7.7. Arguments de type composite dans les fonctions en langage C
33.7.8. Renvoi de lignes (types composites) à partir de fonctions en langage C
33.7.9. Renvoi d'ensembles depuis les fonctions en langage C
33.7.10. Arguments polymorphes et types renvoyés
33.7.11. Arguments et codes de retour polymorphiques
33.8. Surcharge de fonction
33.9. Agrégats définis par l'utilisateur
33.10. Types définis par l'utilisateur
33.11. Opérateurs définis par l'utilisateur
33.12. Informations sur l'optimisation d'un opérateur
33.12.1. COMMUTATOR
33.12.2. NEGATOR
33.12.3. RESTRICT
33.12.4. JOIN
33.12.5. HASHES
33.12.6. MERGES (SORT1, SORT2, LTCMP, GTCMP)
33.13. Interfacer des extensions d'index
33.13.1. Méthodes d'indexage et classes d'opérateurs
33.13.2. Stratégies des méthode d'indexage
33.13.3. Routines d'appui des méthodes d'indexage
33.13.4. Exemple
33.13.5. Dépendance du système pour les classes d'opérateur
33.13.6. Caractéristiques spéciales des classes d'opérateur

Dans cette section, nous discutons de la façon d'étendre le langage de requêtes PostgreSQL en ajoutant des :

33.1. Comment fonctionne l'extensibilité

PostgreSQL est extensible parce qu'il opère grâce à un catalogue. Si vous êtes familier avec les systèmes standards de bases de données, vous savez qu'ils enregistrent les informations concernant les bases de données, les tables, les colonnes, etc., dans ce qu'on nomme communément des catalogues systèmes (certains systèmes appellent cela le dictionnaire de données). Pour l'utilisateur, les catalogues apparaissent comme des tables ordinaires mais le SGBD y enregistre ses écritures internes. Une différence essentielle entre PostgreSQL et les systèmes de bases de données relationnelles est que PostgreSQL enregistre beaucoup plus d'informations dans ses catalogues : pas seulement l'information à propos des tables et des colonnes, mais aussi l'information au sujet des types de données, des fonctions, des méthodes d'accès, etc. Ces tables peuvent être modifiées par l'utilisateur et, puisque PostgreSQL fonde ses opérations sur ces tables, cela signifie que PostgreSQL peut être étendu par les utilisateurs. En comparaison, les systèmes de bases de données conventionnels peuvent seulement être étendus en modifiant les procédures dans le code source ou en installant des modules spécifiquement écrits par le vendeur de SGBD.

Encore mieux, le serveur PostgreSQL peut s'ajouter du code écrit par l'utilisateur grâce au chargement dynamique. C'est-à-dire que l'utilisateur peut spécifier un fichier de code objet (par exemple une bibliothèque partagée) qui implémente un nouveau type ou une nouvelle fonction et que PostgreSQL chargera à la demande. Il est encore plus évident d'ajouter au serveur du code écrit en SQL. Cette possibilité de modifier son fonctionnement << à la volée >> fait de PostgreSQL un outil unique pour le prototypage rapide de nouvelles applications et de structures de stockage.