Vous n'êtes pas identifié(e).
Pages : 1
Merci Marc pour ces précisions, cela m'a grandement aidé.
Cordialement,
Merci Marc pour cette réponse.
Je me suis trompé lors de mon précédent mail.
Je voulais mettre : PQgetResult au lieu de PQsendQuery.
La phrase corrigée est donc : Néanmoins cela veut-il dire que PQgetResult monte tous les enregistrements en RAM ?
Le cas échéant, je n'ai donc aucune autre possibilité que de passer par des curseurs pour gérer un mode 'lazy' pour récupérer les données ?
Cordialement,
Merci beaucoup Gleu pour ta réponse.
J'ai regardé les curseurs et en effet cela semble correspondre à mes besoins
Néanmoins cela veut-il dire que PQsendQuery monte tous les enregistrements en RAM ?
Cordialement,
Bonjour à tous,
je suis en train de développer un wrapper de database en C.
J'ai utilisé l'API C de MySQL et je m'attaque à celle de PG maintenant.
Sous mysql on a la possibilité de récupérer une requête de plusieurs manières :
- récupérer l'ensemble des enregistrements mysql_store_results()
- récupérer un a un les enregistrements via mysql_use_result() puis boucle sur mysql_fetch_row()
L'avantage de cette 2eme méthode et que, quand on récupère des millions d'enregistrements, on ne sature pas la RAM (pratique ).
Je voudrais faire la même chose avec PG.
Est-ce possible ?
J'ai vu quelque chose comme :
PQsendQuery( conn, "SELECT * FROM foo" );
res = PQgetResult(conn );
nFields = PQnfields(res);
/* Affichage des enregistrements */
for (i = 0; i < PQntuples(res); i++) {
for (j = 0; j < nFields; j++)
printf("%-15s", PQgetvalue(res, i, j));
}
Ce qui m'inquiète dans l'appel à PQgetvalues() c'est qu'on lui passe des index... cela veut-il dire que tout est déjà en RAM ? Le cas échéant ce n'est pas ce que je veux.
Je veux pouvoir faire des sorte de next() pour récupérer 1 à 1 les rows...
Quelqu'un peut m'aider ?
Merci d'avance
Pages : 1