Ich füge eine Gleitkommazahl in eine Tabelle mit libpq
ein. Ich erhalte diesen Fehler INSERT failed: ERROR: insufficient data left in message
.Einfügen einer Fließkommazahl in eine Tabelle mit Hilfe von libpq
Hier ist der entsprechende Ausschnitt aus meiner Code-Basis:
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);
1. Punkt: testlibpq2.c sagt ergarding OID "Lassen Sie das Back-End Param-Typ abzuleiten" für beide Binär-und Text-Beispiele. Deshalb habe ich es weggelassen. Ihr 2. Punkt ist gültig. – Jam
Wie denkst du, sollte das Backend folgern, dass 4 Bytes, die du passierst, ein Double sind? [Die Dokumentation] (https://www.postgresql.org/docs/current/static/libpq-exec.html#LIBPQ-PQEXECPARAMS) sagt: * Wenn paramTypes NULL ist, oder ein bestimmtes Element im Array ist Null, die Server leitet einen Datentyp für das Parametersymbol auf die gleiche Weise wie für eine ** untypisierte Literalfolge **. * (Hervorhebung meins) –