Csatlakozás C-vel postgres-hez

Van egy C programom, ami postgres adatbázist tölt fel adatokkal, illetve egy weblapom, ami ebből olvasgat. PHP-vel tökéletesen tudok kapcsolódni a szerverhez, a C-vel viszont gondok vannak.

Az adatbázissal kapcsolatos részek:


void clearres() {
    if(res) {
        PQclear(res);
        res = NULL;
    }
}

void db_end() {
    printf("exiting...\n");
    clearres();
    PQfinish(conn);
    exit(0);
}

void checkconn() {
    PQconsumeInput(conn);
    if(PQstatus(conn) == CONNECTION_OK)
        return;

    printf("connection lost, reconnecting...\n");
    PQreset(conn);
    if(PQstatus(conn) == CONNECTION_OK)
        return;

    printf("can't connect to database\n");
    db_end();
}

void execquery(char *cmd, const char **par, int npar, ExecStatusType expected) {
    checkconn();
    clearres();
    res = PQexecParams(conn, cmd, npar, NULL, par, NULL, NULL, 0);
    if(PQresultStatus(res) == expected)
        return;
}

void write_cur() {
	char *query[255];
        /* itt még némi finomítás */
	execquery(*query,NULL,0,PGRES_COMMAND_OK);
	
}

int main( int argc, char *argv[] ) {
    // init
    conn = PQsetdbLogin("localhost","5432",NULL,NULL,"*","*","*");
    checkconn();
    //execquery("BEGIN;",NULL,0,PGRES_COMMAND_OK);
    /* némi kód itt is, a program többi részével kapcsolatos */
    //execquery("COMMIT;",NULL,0,PGRES_COMMAND_OK);
    db_end();
    return 0;
}

A query ami lefut az jó, mert kézzel beírva működik.
Valami ötletetek van? Hol lehet a baj?

Hozzászólások

Elfeljtetted leírni, hogy _mi_ a gond.

Használd a PQconnectdb-t:

PGconn *conhnd=PQconnectdb("");

Mondhatnál hibakódot.

Megnézhetnéd, hogy fel tudja-e oldani a localhost-ot,
vagy írj helyette 127.0.0.1-et.

A saját programomban ez van:

conn=PQconnectdb("");

azaz üres string, amivel a home-omban futó
szerverre, a saját userid-mmel egyező nevű
adatbázisba tudok jelszó nélkül belépni.

Nem értek a c hez (nagyon nem), de nem világos számomra, hogy a connectálás nem megy, vagy a tranzakció nem commitolódik. Első blikkre mintha connectálna, csak nem commitolna.

Hogy a connect megy az vszínű látszik a logokbók.

A második esetre tegyél bele valami hosszú várakozást, amíg még tart a kapcsolat és a tranzakció, és nézd meg pgAdmin-nal, hogy tényleg ott van-e a nyitott tranzakció. Ha ott van, akkor a committal lesz a baj.

Vagy csak próbálj meg selectelni és kiírni adatokat. Ha a select megy és az insert nem, akkor megint csak a tranzakciókezelés gyanús.

(PHP-be nekem autokatikus auto-commit beállítás rémlik)

A transactionkezelést kicommenteltem, hátha az lenne a hibás, de nem az. A kapcsolat tuira létrejön, mivel kapcsolódás után meghívom a checkconn() fgv-t, illetve minden query előtt is meghívom.

Belepakoltam pár hibaüzenet kijelzőt, és végül a gond az lett, hogy elfelejtettem privilégiumot adni az adott usernek egy szekvenciára, ami gond, mert az kell az inserteléshez. Bocsánat, akit feltartottam, én voltam a hülye.

---------
WARNING: Linux requires you to type! After rebooted to Windows, you can safely unplug your keyboard.