"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 中截断。
和类似的。连接工作得很好,因为你从数据库中得到了答案
我正在尝试 运行 此查询使用 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 中截断。
和类似的。连接工作得很好,因为你从数据库中得到了答案