【问题标题】:Programatically finding the number of rows affected by a Postgres COPY以编程方式查找受 Postgres COPY 影响的行数
【发布时间】:2010-10-08 16:56:00
【问题描述】:

我正在使用 Postgres 8.2 和用于 ANSI C 的相关 libpq 库。我浏览了文档,但没有找到可以提供特定信息的内容。

在文档的“复制”部分,“输出”是这样描述的:

成功完成后,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);
    }

然而,输出总是“复制完成:0 行导入”,尽管行 已导入。

如果有任何提示,我将不胜感激

【问题讨论】:

    标签: c postgresql


    【解决方案1】:

    我相信你需要使用PQcmdTuples() 而不是 PQntuples()。

    【讨论】:

      【解决方案2】:
       fprintf(stderr, "COPY completed: %s rows imported\n", PQcmdTuples(res));
      

      注意%s,这里是字符串,不是整数。

      【讨论】:

        【解决方案3】:

        PQntuples()返回查询结果的行数,为0,返回一个int类型。

        PQcmdTuples() 返回受您发出的 sql 命令影响的行数(在本例中为 COPY)。它返回一个 char 类型。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-17
          • 2013-05-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多