"Relation does not exist" 错误,仅适用于 libpq

"Relation does not exist" error, only with libpq

我正在尝试 运行 此查询使用 PQexec() (libpq)

从我的 C 代码向用户 table 插入新行
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)) 
 , 'Tester', 27) 
RETURNING Id;

当我在 psql 终端 运行 它执行我需要的,但是从 C 它 returns

Error executing query: ERROR:  relation "users" does not exist

我检查了连接状态,它成功了,使用的是我从终端连接到的同一个用户。怎么找不到用户 table?

编辑:添加 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);

你的库问题 link 编译。

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

我要扣分:

 Error executing query: ERROR:  relation "users" does not exist

当数据库没有找到table(视图,或者wathelse可以通过一个SELECT,他给出了"relation"的名字时抛出这种错误.所以您的代码看起来不错,但部分原因可能是:

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

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