C, postgresovský libpq a SQL COPY

Sekcia: Programovanie 10.12.2010 | 16:18
Avatar maor Mint, Debian, Raspbian, LibreELEC  Používateľ
Zdravím.
Prejdem rovno na vec. Mám kód v C-éčku:
fin = otvor_subor(nazov_suboru, READ);

vysledok = PQexec(conn, "COPY tabulka FROM STDIN WITH DELIMITER ','");
if (PQresultStatus(vysledok) != PGRES_COPY_IN) {
vypis_chyb(ECOPY, PQerrorMessage(conn));
exit_nicely(conn);
}

buffer = (char *) malloc(154 * sizeof(char));

while (!feof(fin)) {
if (fgets(buffer, 154, fin) != NULL) {
tmp = PQputCopyData(conn, buffer, strlen(buffer));
if (tmp != 1) {
vypis_chyb(ECOPY, PQerrorMessage(conn));
exit_nicely(conn);
} } }

tmp2 = PQputCopyEnd(conn, NULL);
if (tmp2 != 1) {
vypis_chyb(ECOPYEND, PQerrorMessage(conn));
exit_nicely(conn);
}

free(buffer);
PQclear(vysledok);
if (fclose(fin) == EOF) {
printf("Chyba");
exit(EXIT_FAILURE);
}

Otvorenie súboru mám odskúšané a funguje korektne. Problém je s kopírovaním dát pomocou SQL príkazu COPY.
Celé mi to prejde bez chýb, akurát do databázovej tabuľky sa dáta nezapísali.
Pri debuggovaní PQexec(conn, "COPY tabulka FROM STDIN WITH DELIMITER ','") je rovné PGRES_COPY_IN, ďalej PQputCopyData(conn, buffer, strlen(buffer)) je 1, čo znamená, že dáta sú odoslané. Rovnako aj PQputCopyEnd(conn, NULL) je 1, t.j. ukončenie posielania bolo úspešné.

Poraďte mi prosím niekto, čo robím zle.
    • Re: C, postgresovský libpq a SQL COPY 10.12.2010 | 22:13
      WlaSaTy   Návštevník
      Kedysi, v dobách keď zem bola plochá a hviezdy boli len dierkami na nebeskej opone, tak vtedy sa narodili dvojičky. Volali sa commit a rollback.
      • Re: C, postgresovský libpq a SQL COPY 10.12.2010 | 23:46
        Avatar m4jkl   Používateľ
        jop, konkretne to vyzera na PQexec( conn, "commit" );
        ;)
        • Re: C, postgresovský libpq a SQL COPY 11.12.2010 | 00:21
          Avatar maor Mint, Debian, Raspbian, LibreELEC  Používateľ
          Commit síce priamo môj problém nevyriešil, ale odstránil ďalšie možné problémy.
          Riešenie bolo úplne triviálne, chybu som mal v tom dátovom súbore, ktorý som chcel načítať.

          Vďaka páni za ochotu ;-)