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.
PQexec( conn, "commit" );
;)
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 ;-)