Vous n'êtes pas identifié(e).
Ok, c'est donc une erreur d'exécution, pas de compilation.
Bref, si ce n'est pas la cause du problème, je ne vois pas.
Vérifiez chacune des étapes : la chaîne générée par PQescapeByteaConn, celle générée par sprintf, ce que retourne PQExec…
Marc.
Hors ligne
Pas de problème pour les chaines, elles semblent tout à fait correctes.
J'obtiens un PGRES_TUPLES_OK mais un champ NULL avec PQgetvalue de ma colonne contenant les bytea
Hors ligne
C'est donc que quelque chose ne va pas dans l'ordre que vous envoyez. vous pouvez le copier coller ? (ainsi que la définition de la table)
Marc.
Hors ligne
Ok.
Alors la table :
CREATE TABLE generalconfiguration (generalconfigid serial8 PRIMARY KEY, generalconfiguration bytea, generalconfigsize int4);
Par contre je n'arrive pas avoir la requête entière car le bytea est trop grand pour être affiché.
Mais je la construit avec :
sprintf(query, "INSERT INTO generalconfiguration(generalconfiguration,generalconfigsize) VALUES('%s',%d) "
"RETURNING generalconfigid as id",
stopConf,
currentConfIndex->endConfSize);
stopconf étant la chaine échappée par la fonction PQescapeByteaConn et currentConfIndex une structure contenant plusieurs info dont la taille de la configuration
Hors ligne
Ça devrait marcher.
Toutefois, pour ce genre de requête, il serait plus malin, à mon avis, de passer par PQExecParams : ça évitera la (très coûteuse) conversion du bytea vers une chaîne de caractères, sans même parler du temps perdu par le parseur SQL à traiter une chaîne.
Il y a une explication sur comment le faire ici :
http://archives.postgresql.org/pgsql-in … g00005.php
C'est un tout petit peu plus compliqué, mais beaucoup plus rapide et plus fiable.
Marc.
Hors ligne
Ok je vais tester ceci.
Merci beaucoup
Hors ligne