Vous n'êtes pas identifié(e).

#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 smile
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 smile ).
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 smile

Pied de page des forums

Propulsé par FluxBB