Les fonctions côté serveur conçues pour la manipulation des « Large Objects » en SQL sont listées dans Tableau 33.1.
Tableau 33.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 superutilisateurs 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 superutilisateur (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 superutilisateur 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
superutilisateur. 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
superutilisateur 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
.