Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 Re : Général » valeurs binaires de tableaux » 14/09/2017 22:49:31
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.
#2 Re : Général » valeurs binaires de tableaux » 12/09/2017 22:31:49
C'est une idée... je vais essayer.
Merci pour la suggestion.
#3 Général » valeurs binaires de tableaux » 10/09/2017 22:43:08
- skylendar
- Réponses : 4
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.
#4 Re : Général » écriture d'un large object » 05/09/2017 22:40:24
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.
#5 Général » écriture d'un large object » 03/09/2017 23:14:16
- skylendar
- Réponses : 3
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.
#6 Re : Général » create type et les fonctions INPUT et OUTPUT » 15/08/2017 22:32:14
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
#7 Général » create type et les fonctions INPUT et OUTPUT » 13/08/2017 23:13:02
- skylendar
- Réponses : 2
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