Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 Re : C et C++ » [RÉSOLU] libpq et result » 12/01/2010 12:39:26
Merci Marc pour ces précisions, cela m'a grandement aidé.
Cordialement,
#2 Re : C et C++ » [RÉSOLU] libpq et result » 11/01/2010 18:09:46
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,
#3 Re : C et C++ » [RÉSOLU] libpq et result » 11/01/2010 17:27:56
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,
#4 C et C++ » [RÉSOLU] libpq et result » 31/12/2009 17:45:43
- symphonyxrv
- Réponses : 6
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