J'insère un nombre à virgule flottante dans une table à l'aide de libpq
. Je reçois cette erreur INSERT failed: ERROR: insufficient data left in message
.Insertion d'un nombre à virgule flottante dans une table à l'aide de libpq
Voici l'extrait correspondant de ma base de code:
printf ("Enter write parameter_value");
scanf("%f", ¶meter_value);
char *stm = "INSERT INTO write_reg_set (parameter_value) VALUES ($1::double precision)";
int nparam = 1;
//set the values to use
const char *values[1] = {(char *)¶meter_value};
//calculate the lengths of each of the values
int lengths[1] = {sizeof(parameter_value)};
//state which parameters are binary
int binary[1] = {1};
PGresult *res = PQexecParams(conn,
stm,
nparam, //number of parameters
NULL, //ignore the Oid field
values, //values to substitute $1 and $2 and so on
lengths, //the lengths, in bytes, of each of the parameter values
binary, //whether the values are binary or not
0); //we want the result in text format
if (PQresultStatus(res) != PGRES_COMMAND_OK) {
fprintf(stderr, "INSERT failed: %s", PQerrorMessage(conn));
exit_nicely(conn,res);
}
PQclear(res);
1er point: testlibpq2.c dit ergarding OID "laisser le backend en déduire le type param" pour les deux binaires et des exemples de texte. Thatswhy je l'ai omis. votre 2ème point est valide. – Jam
Comment pensez-vous que le backend supposé déduire que 4 octets vous le passez sont un double? [La documentation] (https://www.postgresql.org/docs/current/static/libpq-exec.html#LIBPQ-PQEXECPARAMS) dit: * Si paramTypes est NULL, ou si un élément particulier du tableau est zéro, le le serveur déduit un type de données pour le symbole de paramètre de la même manière que pour une chaîne littérale ** non typée **. –