

Les fonctions côté serveur conçues pour la manipulation des « Large Objects » en SQL sont listées dans Tableau 35.1.
Tableau 35.1. Fonctions SQL orientées « Large Object »
   Il existe d'autres fonctions côté serveur correspondant à chacune des
   fonctions côté client décrites précédemment. En fait, la plupart des
   fonctions côté client sont simplement des interfaces vers l'équivalent
   côté serveur. Celles qu'il est possible d'appeler via des commandes SQL
   sont
   lo_creat,
   lo_create,
   lo_create,
   lo_unlink,
   lo_import
   et
   lo_export.
   Voici des exemples de leur utilisation :
   
CREATE TABLE image (
    nom             text,
    donnees         oid
);
SELECT lo_creat(-1);       -- renvoie l'OID du nouveau Large Object
SELECT lo_create(43213);   -- tente de créer le Large Object d'OID 43213
SELECT lo_unlink(173454);  -- supprime le Large Object d'OID 173454
INSERT INTO image (nom, donnees)
    VALUES ('superbe image', lo_import('/etc/motd'));
INSERT INTO image (nom, donnees)  -- identique à ci-dessus, mais précise l'OID à utiliser
    VALUES ('superbe image', lo_import('/etc/motd', 68583));
SELECT lo_export(image.donnees, '/tmp/motd') FROM image
    WHERE nom = 'superbe image';
   
   Les fonctions lo_import et
   lo_export côté serveur se comportent considérablement
   différemment de leurs analogues côté client. Ces deux fonctions lisent et
   écrivent des fichiers dans le système de fichiers du serveur en utilisant
   les droits du propriétaire du serveur de base de données. Du coup, par
   défaut, leur utilisation est restreinte aux super-utilisateurs PostgreSQL.
   Au contraire des fonctions côté serveur, les fonctions d'import et
   d'export côté client lisent et écrivent des fichiers dans le système de
   fichiers du client en utilisant les droits du programme client. Les
   fonctions côté client ne nécessitent pas de droits particuliers sur la
   base, sauf celui de lire et écrire le « Large Object » en
   question.
  
    Il est possible de donner le droit d'utiliser les fonctions serveurs
    lo_import et lo_export à des
    utilisateurs standards avec l'instruction GRANT
    mais les implications sur la sécurité doivent être appréhendées avec
    attention. Un utilisateur mal intentionné avec de tels droits pourrait
    facilement les utiliser pour devenir super-utilisateur (par exemple en
    réécrivant les fichiers de configuration du serveur) ou pourrait attaquer
    le reste du système de fichiers du serveur, sans avoir à se soucier
    d'obtenir les droits de super-utilisateur de la base de données.
    L'accès aux rôles ayant de tels droits doit de ce fait être
    gardé très précautionneusement, tout comme l'accès aux rôles
    super-utilisateur. Néanmoins, si l'utilisation des fonctions
    serveurs lo_import et lo_export
    sont nécessaires pour certaines tâches de routine, il est plus sûr
    d'utiliser un rôle avec ces droits qu'un rôle avec les droits complets du
    super-utilisateur car cela aide à réduire le risque de dommages au niveau
    des erreurs accidentelles.
   
   Les fonctionnalités de lo_read et
   lo_write sont aussi disponibles via des appels côté
   serveur mais les noms des fonctions diffèrent des interfaces côté client
   du fait qu'elles ne possèdent pas de tiret bas. Vous devez appeler ces
   fonctions avec loread et
   lowrite.