Chapitre 31. Extension de SQL

Table des matières
31.1. Comment fonctionne l'extensibilité
31.2. Système de typage de PostgreSQL
31.2.1. Types et fonctions polymorphes
31.2.2. Types de base
31.2.3. Types composites
31.2.4. Domaines
31.2.5. Pseudo-Types
31.2.6. Types polymorphiques
31.3. Fonctions définies par l'utilisateur
31.4. Fonctions en langage de requêtes (SQL)
31.4.1. Fonctions SQL sur les types de base
31.4.2. Fonctions SQL sur les types composites
31.4.3. Fonctions SQL comme sources de table
31.4.4. Fonctions SQL renvoyant un ensemble
31.4.5. Fonctions SQL polymorphes
31.5. Surcharge des fonctions
31.6. Catégories de volatibilité des fonctions
31.7. Fonctions en langage de procédures
31.8. Fonctions internes
31.9. Fonctions en langage C
31.9.1. Chargement dynamique
31.9.2. Types de base dans les fonctions en langage C
31.9.3. Conventions d'appel de la version 0 pour les fonctions en langage C
31.9.4. Conventions d'appel de la version 1 pour les fonctions en langage C
31.9.5. Écriture du code
31.9.6. Compiler et lier des fonctions chargées dynamiquement
31.9.7. Infrastructure de construction d'extensions
31.9.8. Arguments de type composite dans les fonctions en langage C
31.9.9. Renvoi de lignes (types composites) à partir de fonctions en langage C
31.9.10. Renvoi d'ensembles depuis les fonctions en langage C
31.9.11. Arguments polymorphes et types renvoyés
31.10. Agrégats définis par l'utilisateur
31.11. Types définis par l'utilisateur
31.12. Opérateurs définis par l'utilisateur
31.13. Informations sur l'optimisation d'un opérateur
31.13.1. COMMUTATOR
31.13.2. NEGATOR
31.13.3. RESTRICT
31.13.4. JOIN
31.13.5. HASHES
31.13.6. MERGES (SORT1, SORT2, LTCMP, GTCMP)
31.14. Interfacer des extensions d'index
31.14.1. Méthodes d'indexation et classes d'opérateurs
31.14.2. Stratégies des méthode d'indexation
31.14.3. Routines d'appui des méthodes d'indexation
31.14.4. Exemple
31.14.5. Classes d'opérateur inter-type
31.14.6. Dépendances du système pour les classes d'opérateur
31.14.7. 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 :

31.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.