如何使用PQputCopyData插入多个列

时间:2014-05-21 13:10:46

标签: postgresql bulkinsert

我正在尝试使用以下代码使用PQputCopyData插入两列。但是一旦检查到最终结果,就会显示编码UTF8的错误无效字节序列,并且数据没有插入到数据库中。 两列类型均为character varying。我在这里做错了什么?

const char *buffer = "john,doe";

PGresult *res;

res=PQexec(conn,"COPY john FROM STDIN DELIMITER ',';");
cout<<buffer;
if(PQresultStatus(res) != PGRES_COPY_IN)
{
    cout<<"copy in not ok";
}
else
{
    if(PQputCopyData(conn,buffer,400) == 1)
    {
        if(PQputCopyEnd(conn,NULL) == 1)
        {
            PGresult *res = PQgetResult(conn);
            if(PQresultStatus(res) == PGRES_COMMAND_OK)
            {

            cout<<"done";
            }
                          else
                           {
            cout<<PQerrorMessage(conn);  Here I get the error invalid  byte sequence for encoding "UTF8"
                            }
        }

        else
        {
            cout<<PQerrorMessage(conn);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

   if(PQputCopyData(conn,buffer,400) == 1)

传递400而不是buffer中内容的实际大小是错误的,这使得它在真实数据之后发送未分配的垃圾。请改用strlen(buffer)

此外,您希望每一行都以换行符结束,因此buffer应为:

const char *buffer = "john,doe\n";