【问题标题】:"Relation does not exist" error, only with libpq“关系不存在”错误,仅适用于 libpq
【发布时间】:2016-12-15 16:13:31
【问题描述】:

我正在尝试运行此查询以使用 PQexec() (libpq) 从我的 C 代码向用户表中插入新行

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

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

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

【问题讨论】:

  • 您能否发布您的实际 C 代码而不仅仅是查询
  • 您的连接参数是否正确?您在发布的代码中使用了两次USERNAME,一次用于dbname=%s,一次用于user=%s
  • @IanAbbott 是的,它们是一样的。
  • psql 终端查询与 C 查询不太一样:SELECT GREATEST(MAX(Id) + 1,1) FROM UsersSELECT GREATEST(MAX(Users.Id) + 1,1)
  • 对了,忘记复制上次的修改了……结果还是一样。

标签: c postgresql error-handling libpq


【解决方案1】:

我要扣分:

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

当数据库找不到表时会抛出这种错误(视图,或者 wathelse 可以通过 SELECT,他给出了“关系”的名称)。所以你的代码看起来不错,但是一个子集原因可能是:

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

和类似的。由于您从数据库中获得了答案,因此连接工作得很好

【讨论】:

    【解决方案2】:

    您的库链接到编译的问题。

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

    【讨论】:

    • 不这么认为...我正在使用库进行编译,并且没有任何编译或链接错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 2019-10-26
    • 2018-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多