我正在使用Postgres 8.2和相关联的用于ANSI C的libpq库。我已经浏览了文档,但未找到能够提供特定信息的内容。
在文档的“COPY”部分中,“输出”描述如下:
成功完成后,COPY命令将返回形式为
的命令标记 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已完成:已导入0行”。
我会很感激任何提示
答案 0 :(得分:3)
fprintf(stderr, "COPY completed: %s rows imported\n", PQcmdTuples(res));
注意%s
这里,它是一个字符串,而不是一个整数。
答案 1 :(得分:3)
PQntuples()返回查询结果中的行数,即0。它返回一个int类型。
PQcmdTuples()返回您发出的sql-command影响的行数(在本例中为COPY)。它返回一个char类型。
答案 2 :(得分:1)
我认为您需要使用PQcmdTuples()而不是PQntuples()。