当前位置: 首页 > 知识库问答 >
问题:

PostgreSQL错误:运算符不存在:name=integer

仰雅昶
2023-03-14

执行简单查询时出现操作符不匹配错误。这是什么原因造成的?

dev_db=# `select * from registrants where user=1;`
ERROR:  operator does not exist: name = integer
LINE 1: select * from registrants where user=1;
                                            ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.

表定义:

dev_db=# \d+ registrants
                              Table "public.registrants"
    Column    |           Type           |     Modifiers      | Storage  | Description
--------------+--------------------------+--------------------+----------+-------------
 user         | integer                  | not null           | plain    |
 degree       | text                     |                    | extended |
 title        | text                     |                    | extended |
 organization | text                     |                    | extended |
 address      | text                     |                    | extended |
 city         | text                     |                    | extended |

Indexes:
    "registrants_pkey" PRIMARY KEY, btree ("user")
Foreign-key constraints:
    "registrants_country_fkey" FOREIGN KEY (country) REFERENCES countries(id)
    "registrants_user_fkey" FOREIGN KEY ("user") REFERENCES users(id)
Referenced by:
    TABLE "class_evaluations" CONSTRAINT "class_evaluations_registrant_fkey" FOREIGN KEY (registrant) REFERENCES registrants("user")

Triggers:
    archive_registrants BEFORE DELETE OR UPDATE ON registrants FOR EACH ROW EXECUTE PROCEDURE archive_reg_table()
Has OIDs: no

共有1个答案

卫俊力
2023-03-14

根据手册,USER是一个保留关键字。您必须引用它以避免语法错误。

SELECT * FROM registrants WHERE "user" = 1

PostgreSQL保留关键字列表

如果有时间更改数据库,请将列名更改为非保留关键字。这将帮助你避免未来的头痛。

 类似资料:
  • 这个表的hibernate映射如下所述 在loginDetails.java中,我将id字段声明为long,userName和password字段声明为string。当我尝试执行以下命令时 我得到 我不明白哪里出了问题。如有任何帮助,不胜感激。

  • 下面我有一个Postgres查询,它基于INSERT或UPDATE audit_operation将主表中的数据恢复到特定时间点的审计表中的数据。 供参考- 工柞道 main_table中的列类型 id: uuid val1:uuid val2:文本 审计表 audit_table中的列类型 id: uuid val1:uuid val2:文本 val3:时间戳 val4:文本 在为以下输入执行上

  • 主要内容:算术运算符,比较运算符,逻辑运算符,位运算符运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。 PostgreSQL 运算符是一个保留关键字或字符,一般用在 WHERE 语句中,作为过滤条件。 常见的运算符有: 算术运算符 比较运算符 逻辑运算符 按位运算符 算术运算符 假设变量 a 为 2,变量 b 为 3,则: 运算符 描述 实例 + 加 a + b 结果为 5 - 减 a - b 结果为 -1 * 乘 a * b 结果为 6 /

  • 问题内容: 我在使用PostgreSQL 9.3和使用qoutes创建的表时遇到了一个奇怪的问题。例如,如果我使用qoutes创建表: 该表已正确创建,在pgAdminIII的SQL窗格中查看该引号时,可以看到保留了引号。但是,当我查询数据库以查找所有可用表的列表时(使用下面的查询),我看到结果不包含表名的引号。 由于该表是用引号创建的,因此我无法直接使用上述查询返回的表名,因为该表名未加引号,并

  • 我在列名方面也遇到了同样的问题,但我希望如果我能找到一个解决表名问题的方法,那么类似的方法也能适用于列名。

  • 当我在postgres中直接执行下面的查询时,它工作正常,但当我使用JPA运行时,就会出现下面的错误。 查询示例: 错误: ERRORorg.hibernate.engine.jdbc.spi.SqlExceptionHelper-ERROR:运算符不存在: boolean=byTea提示:没有运算符匹配给定的名称和参数类型。可能需要添加显式类型转换。 在JPA中配置如下: 基本上我试图实现的是,