He creado esta función para insertar datos en la base de datos:
void add_data_to_db(){ const char *data[2][2] = {"2","e"}; re = PQexecParams(connection, "INSERT INTO test_table "\ "VALUES ($1, $2);", 2,NULL,data[2],NULL,NULL,0); if(PQresultStatus(re) != PGRES_TUPLES_OK){ printf("%s\n", PQresultErrorMessage(re)); } PQclear(re); }pero cuando ejecuto el programa me imprime:
ERROR: invalid byte sequence for encoding "UTF8": 0x80que yo sepa, este problema ocurre cuando agregamos un valor nulo a la tabla, pero yo no.
De acuerdo con la documentación, el quinto argumento de PQExecParams debe ser const char * const *paramValues ... así que un puntero a punteros constantes que apuntan a un char constante . La documentación especifica que debe apuntar a una matriz de la longitud especificada (en el tercer argumento) (2 aquí).
data[2] es el tercer elemento de la matriz de data (¡vaya, solo tiene dos elementos!).
data se degradarían a un puntero al primer elemento; que es un puntero a una matriz de dos punteros, cada uno de los cuales apunta a una cadena. Exactamente lo que necesitas.
Debería ser const char *data[2] , y la llamada a la función debería tener data en lugar de data[2] .
El mensaje de error significa que PostgreSQL encontró bytes que no forman parte de una cadena UTF-8 codificada correctamente.