我正在尝试运行此查询,以使用 PQexec() (libpq) 从我的 C 代码向 Users 表插入新行
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 返回
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);
最佳答案
我要扣除:
Error executing query: ERROR: relation "users" does not exist
当数据库找不到表时会抛出这种错误( View ,或者wathelse可以通过SELECT,他给出了“关系”的名称)。所以你的代码看起来不错,但是一个子集原因可能是:
- 表用户不存在。一些拼写错误
- 您在错误的数据库中执行查询(未定义此表)
- 您在错误的服务器中执行查询(如上所述)
- 您在错误的架构中执行查询(如上所述)
- 字符串从 sprintf 中截断。
和类似的。连接工作得很好,因为您从数据库中得到了答案
关于c - "Relation does not exist"错误,仅适用于 libpq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41168644/