我正在尝试运行此查询以使用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);
答案 0 :(得分:1)
我要去扣除:
Error executing query: ERROR: relation "users" does not exist
当数据库找不到表时(视图,或者wathelse可以通过SELECT,他给出"关系"的名称)这种错误就抛出了。所以你的代码看起来很像很好,但一系列原因可以是:
和类似的。由于您从数据库中得到答案,因此连接效果非常好
答案 1 :(得分:0)
你的库链接到编译的问题。
gcc -I/usr/include/postgresql/ -L/usr/lib/postgresql/8.3/lib/ -lpq