Un langage de procédures doit être « installé » dans toute base
   de données amenée à l'utiliser. Les langages de procédures
   installés dans la base de données template1 sont automatiquement
   disponibles dans toutes les bases de données créées par la suite.
   CREATE DATABASE recopie en effet toutes les informations
   disponibles dans la base template1.
   Il est ainsi possible pour l'administrateur de définir, par base,
   les langages disponibles et d'en rendre certains disponibles
   par défaut.
  
   Pour les langages fournis avec la distribution standard, l'installation
   dans la base courante se fait simplement par l'exécution de la commande
   CREATE EXTENSION langage.
   La procédure manuelle décrite ci-dessous n'est recommandée que pour
   installer des langages qui ne sont pas disponibles sous la forme
   d'extensions.
  
Installation manuelle de langages de procédures
    Un langage de procédures s'installe en cinq étapes effectuées
    obligatoirement par le superutilisateur des bases de données.
    Dans la plupart des cas, les commandes SQL nécessaires doivent être
    placées dans un script d'installation d'une « extension »,
    pour que la commande CREATE EXTENSION puisse être
    utilisé pour installer le langage.
   
La bibliothèque partagée du gestionnaire de langage doit être compilée et installée dans le répertoire de bibliothèques approprié. Cela se déroule comme la construction et l'installation de modules de classiques fonctions C utilisateur ; voir la Section 37.9.5. Il arrive souvent que le gestionnaire du langage dépende d'une bibliothèque externe fournissant le moteur de langage ; dans ce cas, elle doit aussi être installée.
Le gestionnaire doit être déclaré par la commande
CREATE FUNCTIONnom_fonction_gestionnaire() RETURNS gestionnaire_langage AS 'chemin-vers-objet-partagé' LANGUAGE C STRICT;
     Le type de retour spécial gestionnaire_langage indique au
     système que cette fonction ne renvoie pas un type de données SQL et n'est, de ce fait, pas utilisable
     directement dans des expressions SQL.
    
En option, le gestionnaire de langages peut fournir une fonction de gestion « en ligne » qui permet l'exécution de blocs de code anonyme (commandes DO) écrits dans ce langage. Si une fonction de gestion en ligne est fourni par le langage, déclarez-le avec une commande comme
CREATE FUNCTIONnom_fonction_en_ligne(internal) RETURNS void AS 'chemin-vers-objet-partagé' LANGUAGE C;
     En option, le gestionnaire de langages peut fournir une fonction de
     « validation » qui vérifie la définition d'une fonction sans
     réellement l'exécuter. La fonction de validation, si elle existe, est
     appelée par CREATE FUNCTION. Si une telle fonction
     est fournie par le langage, elle sera déclarée avec une commande de la forme
     
CREATE FUNCTIONnom_fonction_validation(oid) RETURNS void AS 'chemin-vers-objet-partagé' LANGUAGE C;
Le LP doit être déclaré par la commande
CREATE [TRUSTED] [PROCEDURAL] LANGUAGEnom_langageHANDLERnom_fonction_gestionnaire[INLINEnom_fonction_en_ligne] [VALIDATORnom_fonction_valideur] ;
     Le mot clé optionnel TRUSTED (autrement dit, digne de
     confiance) indique que le langage n'autorise pas l'accès à des données
     normalement inaccessible à cet utilisateur. Les langages de confiance
     sont conçus pour les utilisateurs standards de la base de données,
     c'est-à-dire ceux qui ne sont pas superutilisateurs, et les autorisent à
     créer en tout sécurité des fonctions et des procédures pour triggers.
     Les fonctions en langage de procédures étant exécutées au sein du serveur,
     le paramètre TRUSTED ne devrait être
     positionné que pour les langages n'accédant pas aux organes internes
     du serveur ou au système de fichiers. Les langages
     PL/pgSQL,
     PL/Tcl, et
     PL/Perl
     sont considérés comme dignes de confiance ; les langages
     PL/TclU,
     PL/PerlU, et
     PL/PythonU
     sont conçus pour fournir des fonctionnalités illimitées et
     ne devraient pas être
     marqués dignes de confiance.
    
L'Exemple 41.1 présente le fonctionnement de la procédure d'installation manuelle du langage PL/Perl.
Exemple 41.1. Installation manuelle de PL/Perl
La commande suivante indique au serveur l'emplacement de la bibliothèque partagée pour la fonction de gestion des appels du langage PL/Perl.
CREATE FUNCTION plperl_call_handler() RETURNS language_handler AS
    '$libdir/plperl' LANGUAGE C;
    
PL/Perl a une fonction de gestion en ligne et une fonction de validation, donc nous déclarons aussi celles-ci :
CREATE FUNCTION plperl_inline_handler(internal) RETURNS void AS
    '$libdir/plperl' LANGUAGE C;
CREATE FUNCTION plperl_validator(oid) RETURNS void AS
    '$libdir/plperl' LANGUAGE C STRICT;
    
La commande :
CREATE TRUSTED PROCEDURAL LANGUAGE plperl
    HANDLER plperl_call_handler
    INLINE plperl_inline_handler
    VALIDATOR plperl_validator;
    
    indique l'évocation des fonctions précédentes pour les fonctions et
    procédures de déclencheur lorsque l'attribut de langage est  plperl.
   
Lors de l'installation par défaut de PostgreSQL, le gestionnaire du langage PL/pgSQL est compilé et installé dans le répertoire des bibliothèques (« lib ») ; de plus, le langage PL/pgSQL est installé dans toutes les bases de données. Si le support de Tcl est configuré, les gestionnaires pour PL/Tcl et PL/TclU sont construits et installés dans le répertoire des bibliothèques mais le langage lui-même n'est pas installé par défaut dans les bases de données. De la même façon, les gestionnaires pour PL/Perl et PL/PerlU sont construits et installés si le support de Perl est configuré et le gestionnaire pour PL/PythonU est installé si le support de Python est configuré mais ces langages ne sont pas installés par défaut.