Vous n'êtes pas identifié(e).
Pages : 1
A ma connaissance non. Il se peut d'ailleurs que l'interface jdbc récupère les valeurs en ascii et fasse la conversion en binaire.
C'est une idée... je vais essayer.
Merci pour la suggestion.
Comme toujours, bonsoir et merci de lire cette question et d'y répondre si vous pouvez.
PostgreSQL peut stocker des tableaux de nombres dans une base, mais l'extraction des valeurs (typiquement au moyen d'un SELECT) retourne une chaîne de caractères '{n1, n2, n3...}'.
Jusqu'ici, rien de nouveau. Pourtant il semble judicieux, quand on travaille avec des tableaux de nombres depuis le C ou un autres langage, de recevoir directement ledit tableau et non une chaîne de caractères à analyser. Question de performance et de risque de bug dans l'analyse.
Est-il possible lors d'une requête sql, de recevoir directement la valeur binaire d'un tableau, et ce avec une librairie standard de postgresql, libpq ou une autres ?
Merci encore de lire cette question.
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.
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.
Les fonctions INPUT et OUTPUT doivent être rédigées en C en non en plpgsql, C'ếtait ça mon erreur.
Là-dessus, j'ai en effet écrit deux fonctions placées fans un objet partagé, et ça marche...
Merci malgré tout de l'aide apportée
D'abord bonsoir Messieurs et merci de lire ce message et d'y répondre si vous pouvez.
je tente de créer un nouveau type composite et d'y associer 2 fonctions en plpgsql pour initialiser un champ de ce type depuis et vers une chaîne de caractères.
La documentation postgres sql-createtype publie un exemple explicatif.(voir CREATE TYPE box)
Malheureusement, il y a un pépin.
Lorsqu'on déclare une fonction INPUT p.ex.
CREATE FUNCTION my_box_in_function(cstring) RETURNS box AS ... ;
comme dans l'exemple cité ci-dessus, cette déclaration est rejetée parce que le type de retour (box) est un shell, c'est-à-dire une déclaration préliminaire et on ne peut déclarer une fonction retournant un tel type. En fait, c'est logique. On ne peut créer et manipuler une variable d'un type non encore défini.
Donc l'exemple donné n'est pas valide. Mais cela n'indique pas comment il faut faire. Essayez l'exemple de la doc...
Avez-vous une idée ?
Merci encore de lire ce message.
Pages : 1