Les fonctions côté serveur conçues pour la manipulation des Large Objects en SQL sont listées dans Tableau 32.1, « Fonctions SQL pour les Large Objects ».
Tableau 32.1. Fonctions SQL pour les Large Objects
Fonction | Type en retour | Description | Exemple | Résultat |
---|---|---|---|---|
lo_from_bytea(loid, oid, string, bytea) | oid | Crée un Large Object et y stocke les données, renvoyant son OID. Passez la valeur 0 pour que le système choisisse un OID. | lo_from_bytea(0, E'\\xffffff00') | 24528 |
lo_put(loid, oid, offset, bigint, str, bytea) | void | Écrit les données au décalage indiqué. | lo_put(24528, 1, E'\\xaa') | |
lo_get(loid, oid [, from bigint, for int]) | bytea | Extrait le contenu ou une sous-chaîne du contenu. | lo_get(24528, 0, 3) | \xffaaff |
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 nouvel objet large SELECT lo_create(43213); -- tente de créer l'objet large d'OID 43213 SELECT lo_unlink(173454); -- supprime l'objet large 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, 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 le droit superutilisateur.
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.