Программно найти количество строк, затронутых копией Postgres - PullRequest
4 голосов
/ 20 февраля 2009

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

В разделе «КОПИЯ» документации «Выходы» описываются так:

При успешном завершении команда COPY возвращает тег команды вида
КОПИЯ СЧЕТ
Количество - это количество скопированных строк.

Предполагая, что conn ссылается на действительный 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);
    }

Как бы то ни было, выход всегда равен «COPY complete: 0 импортированных строк», несмотря на тот факт, что строки импортированы .

Буду признателен за любые советы

Ответы [ 3 ]

3 голосов
/ 20 февраля 2009
 fprintf(stderr, "COPY completed: %s rows imported\n", PQcmdTuples(res));

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

3 голосов
/ 30 марта 2011

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

PQcmdTuples () возвращает количество строк, затронутых введенной вами командой sql (в данном случае COPY). Возвращает тип символа.

1 голос
/ 20 февраля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...