2009-02-19 7 views
4

Я использую Postgres 8.2 и связанную библиотеку libpq для ANSI C. Я просмотрел документацию и не нашел то, что дало бы мне эту конкретную информацию.Программный поиск количества строк, затронутых Postgres COPY

В разделе «COPY» документация «Выходы» описан как таковые:

При успешном завершении, команда COPY возвращает команду тег формы
счетчик копий
граф - количество скопированных строк.

Предполагая, что соед относится к действительному PGconn *, я думал, что я мог бы использовать что-то вроде этого, чтобы вернуть количество строк скопирована:

 sprintf(queryString, "COPY table FROM '%s' WITH DELIMITER '|'", 
      tempFileName); 
    fprintf(stderr, "COPY all records: %s\n", queryString); 
    res = PQexec(conn, queryString); 
    bResultErr = (PQresultStatus(res) != PGRES_COMMAND_OK); 
    if (bResultErr) { 
     PQclear(res); 
     fprintf(stderr, "Aborting:DELETE failed: %s\n", 
       PQerrorMessage(conn)); 
     PQfinish (conn); 
     exit (1); 
    } else { 
     // Display how many records were COPY'd 
     fprintf(stderr, "COPY completed: %d rows imported\n", 
       PQntuples(res)); 
     PQclear(res); 
    } 

Как всегда, Ouput всегда «COPY завершено: 0 строк импортировано ", несмотря на то, что строки являются импортированы.

Я был бы признателен за любые советы

ответ

3
fprintf(stderr, "COPY completed: %s rows imported\n", PQcmdTuples(res)); 

примечание %s здесь, это строка, а не целое число.

1

Я считаю, что вам нужно использовать PQcmdTuples() вместо PQntuples().

2

PQntuples() возвращает количество строк в результате запроса, равное 0. Оно возвращает тип int.

PQcmdTuples() возвращает количество строк, на которые повлияла SQL-команда, которую вы выбрали (в данном случае COPY). Он возвращает тип char.

Смежные вопросы