Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 03/09/2017 23:14:16
- skylendar
- Membre
écriture d'un large object
Tout d'abord et comme d'habitude, bonsoir et merci de lire ce message et d'y répondre si vous pouvez.
Ceci dit, je tente d'écrire un programme en C qui crée un 'large object' et de l'initialiser avec une image.
Voilà ce que cela donne:
int fd, w, size=10000;
char image[10000];
Oid o = lo_creat(conn, INV_READ|INV_WRITE);
if(!o) return false;
fd = lo_open(conn, o, INV_READ|INV_WRITE);
if(fd == -1) return false;
/* ici, fd = 0 */
w = lo_write(conn, fd, image, size);
fprintf(f, "%s\n", PQerrorMessage(conn))
Et c'est là le problème: lo_open retourne 0, une valeur apparemment valide mais que lo_write n'accepte pas. PQerrorMessage renvoie : "descripteur invalide de « Large Object » : 0"
Que se passe-t-il donc ? Où est mon erreur ?
Sur postgresql 9.6.5 linux-i86_64, binaire téléchargé depuis postgresql.com.
Merci encore de lire cette question.
Hors ligne
#2 04/09/2017 08:32:34
- gleu
- Administrateur
Re : écriture d'un large object
Avez-vous ouvert une transaction avant ce code ? parce que le Large Object n'est ouvert que pour la durée de la transaction en cours.
Guillaume.
Hors ligne
#3 05/09/2017 22:40:24
- skylendar
- Membre
Re : écriture d'un large object
Merci pour la remarque!
En effet, si j'entoure mes instructions par un BEGIN/END, ça marche. Mais cette disposition me semble par être explicitée dans la doc, mais dans l'exemple fournis, oui.
Si, il y a 20 ans, j'avais décrit PostgreSQL, open source avec toutes ses possibilités, on m'aurait ris au nez.
Merci encore pour l'aide fournie.
Hors ligne
#4 06/09/2017 08:13:14
- gleu
- Administrateur
Re : écriture d'un large object
C'est explicité dans la doc. Deuxième paragraphe du chapitre https://www.postgresql.org/docs/9.6/sta … faces.html : "All large object manipulation using these functions must take place within an SQL transaction block, since large object file descriptors are only valid for the duration of a transaction."
Guillaume.
Hors ligne
Pages : 1