C &引用;“关系不存在”;错误,仅适用于libpq
我正在尝试运行此查询,以便使用PQexec()(libpq)从我的C代码向Users表插入新行 当我在psql终端中运行它时,它执行我需要的操作,但从C返回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
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