C &引用;“关系不存在”;错误,仅适用于libpq

C &引用;“关系不存在”;错误,仅适用于libpq,c,postgresql,error-handling,libpq,C,Postgresql,Error Handling,Libpq,我正在尝试运行此查询,以便使用PQexec()(libpq)从我的C代码向Users表插入新行 当我在psql终端中运行它时,它执行我需要的操作,但从C返回 Error executing query: ERROR: relation "users" does not exist 我检查了连接状态,它成功了,使用了我从终端连接到的同一个用户。为什么找不到用户表 编辑:添加C代码 连接: sprintf(connect_param,"host=address dbname=%s user=%s

我正在尝试运行此查询,以便使用PQexec()(libpq)从我的C代码向Users表插入新行

当我在psql终端中运行它时,它执行我需要的操作,但从C返回

Error executing query: ERROR:  relation "users" does not exist
我检查了连接状态,它成功了,使用了我从终端连接到的同一个用户。为什么找不到用户表

编辑:添加C代码 连接:

sprintf(connect_param,"host=address dbname=%s user=%s password=%s",
                                                    USERNAME, USERNAME, PASSWORD);
conn = PQconnectdb(connect_param);
查询:

sprintf(cmd, "INSERT INTO Users "
             "VALUES (( "
            "SELECT MIN(s.id) "
            "FROM generate_series(1,( "
            "SELECT GREATEST(MAX(Id) + 1,1) FROM Users "
            " )) AS s(id) "
            "WHERE NOT EXISTS (SELECT 1 FROM Users WHERE Id = s.id)) "
            " , \'%s\', %d) "
            "RETURNING Id;", Name, Age);
res = PQexec(conn,cmd);

你的问题库链接到编译

gcc -I/usr/include/postgresql/ -L/usr/lib/postgresql/8.3/lib/ -lpq

我打算扣除:

 Error executing query: ERROR:  relation "users" does not exist
当数据库找不到表(视图或wathelse可以通过一个SELECT,他给出了“relation”的名称)时,就会抛出这种错误。因此您的代码看起来不错,但原因可能是:

  • 表用户不存在。一些拼写错误
  • 在错误的数据库中执行查询(未定义此表)
  • 您在错误的服务器上执行查询(如上所述)
  • 您在错误的架构中执行查询(如上所述)
  • 字符串从sprintf中被截断

类似的。连接工作得很好,因为您从数据库中得到了答案

您能发布实际的C代码而不仅仅是查询吗?您的连接参数正确吗?您在发布的代码中使用了两次
USERNAME
,一次用于
dbname=%s
,一次用于
user=%s
@IanAbbott是的,它们是一样的。psql终端查询与C查询不太一样:
从用户中选择最大值(MAX(Id)+1,1)与
选择最大值(MAX(Users.Id)+1,1)
。对,忘记复制上一次更改。。。尽管如此,结果还是一样的。别这么认为。。。我正在使用库进行编译,没有任何编译或链接错误。
 Error executing query: ERROR:  relation "users" does not exist