首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgresql、libpq、C

Postgresql、libpq、C
EN

Stack Overflow用户
提问于 2013-06-02 20:59:09
回答 1查看 1.9K关注 0票数 2

我有这样的程序,从"C“OK工作。如果它们不存在,则创建一个表。

代码语言:javascript
复制
PGresult *result;
conn = PG_connect();
if (conn)
{
    if (!PG_begin(conn))
    {
        char strtable[512] = {0};
        sprintf(strtable, "%s", "CREATE TABLE IF NOT EXISTS mytable");
        strcat(strtable, " (setting TEXT, value TEXT, rez1 TEXT, rez2 TEXT)");
        result = PQexec(conn, strtable);
        if (PQresultStatus(result) != PGRES_COMMAND_OK)
        {
            printf("CREATE TABLE failed: %s\n", PQerrorMessage(conn));
            PQclear(result);
            exit_nicely(conn);
        }

        PQclear(result);
        PG_end(conn);
    }
}
PQfinish(conn);

这意味着我是正确连接的。

但是为什么(究竟)在相同的代码和情况下,这个查询不能工作呢?

代码语言:javascript
复制
sprintf(strtable, "%s%s", "SELECT 1 FROM pg_tables WHERE tablename=", "\'invli\'");

我总是得到PQresultStatus(结果)=2和PQerrorMessage(conn),没有任何文本!

我在npgsql中使用的所有代码都没有问题。另外一个问题是,如何从这样的简单查询或只有一条信息的“计数”中获得最好的结果?在npgsql中,我使用了"ExecuteScalar“函数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-02 21:08:07

根据PostgreSQL头文件,状态码2是PGRES_TUPLES_OK,这意味着“后端正确执行了返回元组的查询命令,PGresult包含结果元组”。所以这里没有错误。相反,为SELECT查询返回PGRES_COMMAND_OK会很奇怪。

另请参阅文档中的状态代码(http://www.postgresql.org/docs/current/static/libpq-exec.html):

PGRES_COMMAND_OK成功完成未返回任何数据的命令。

PGRES_TUPLES_OK成功完成返回数据的命令(如SELECT或SHOW)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16882992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档