☰
Current Page
Main Menu
Home
Home
Editing
pg-sql-error
Edit
Preview
h1
h2
h3
default
Set your preferred keybinding
default
vim
emacs
markdown
Set this page's format to
AsciiDoc
Creole
Markdown
MediaWiki
Org-mode
Plain Text
RDoc
Textile
Rendering unavailable for
BibTeX
Pod
reStructuredText
Help 1
Help 1
Help 1
Help 2
Help 3
Help 4
Help 5
Help 6
Help 7
Help 8
Autosaved text is available. Click the button to restore it.
Restore Text
# PostgreSQL经常遇到的SQL错误 ## 1. ERROR: operator does not exist: character varying = integer ``` Caused by: com.sie.snest.engine.exception.SnestException: (补充异常)SQL:SELECT "id" FROM "rbac_organization" WHERE "status" = 1 AND code_path LIKE CONCAT((SELECT o.code_path FROM "rbac_organization" o WHERE o."id"='04mebs02ragu9'),'/%') 入参:[] at com.sie.snest.engine.db.relationdb.RelationDBAccessor.doExecute(RelationDBAccessor.java:680) ... 137 common frames omitted 2025-02-18 11:56:49.402 [http-nio-8060-exec-1] ERROR c.s.snest.engine.db.relationdb.RelationDBAccessor -数据源:main,执行SQL失败:ERROR: operator does not exist: character varying = integer Hint: No operator matches the given name and argument types. You might need to add explicit type casts. Position: 53 异常SQL:SELECT "id" FROM "rbac_organization" WHERE "status" = 1 AND code_path LIKE CONCAT(( SELECT o.code_path FROM "rbac_organization" o WHERE o."id" = '04mebs02ragu9' ), '/%') ``` PG的数据类型转换非常严格,不允许字段类型与值的类型不匹配. 这个错误是因为 SQL 查询中字段类型与比较值的类型不匹配。具体问题出在 "status" = 1 。如果 "status" 是字符串类型(character varying),需要用 '1' 而不是 1建议先确认字段类型,然后根据类型调整 SQL 查询。例如,如果 "status" 是字符串,改为 "status" = '1'. 解决方法 1. 检查字段类型 2. 或者显式类型转换 3. 检查 SQL 查询 4. 检查Filter的参数值类型,应该是java的String类型,而不是Integer 仔细检查你的 SQL 查询,确保字段和参数的类型一致。例如,如果你的字段是 id(varchar 类型),不要直接写: ```sql SELECT * FROM your_table WHERE id = 123; 而应该写: SELECT * FROM your_table WHERE id = '123'; ``` ## 2. ERROR: column "t" of relation "tenant_user_instance" does not exist PostgreSQL UPDATE 语句中,更新列名时不能带别名. 请注意,在 PostgreSQL 中,虽然可以在 UPDATE 语句中为表指定别名,但在实际使用这些列名时,并不需要(也不应该)通过别名来引用它们. 条件可以带别名,但是列名不能带别名. ```sql UPDATE tenant_user_instance t SET t."update_date" = TO_TIMESTAMP('2025-02-18 11:00:27.296', 'YYYY-MM-DD HH24:MI:SS.FF') WHERE t."action_dimension_id" = '04me8wsxbgrqt' AND t."user_id" = '04me9sszlk54b' AND t."instance_id" = '04me86gy87lxe' AND t."source" IN ('USER', 'BUSINESS_APP'); ``` 错误 [42703]: ERROR: column "t" of relation "tenant_user_instance" does not exist 表示在 tenant_user_instance 表中找不到名为 "t" 的列。实际上,这个错误通常是由表别名的误用引起的。在 PostgreSQL 中,更新语句可以使用表别名,但不需要像在 SELECT 语句中那样引用别名作为表名的一部分。 以下是修正后的 SQL 语句,移除了对别名 "t" 的不正确引用: ```sql UPDATE tenant_user_instance t SET update_date = TO_TIMESTAMP('2025-02-18 11:00:27.296', 'YYYY-MM-DD HH24:MI:SS.FF') WHERE t.action_dimension_id = '04me8wsxbgrqt' AND t.user_id = '04me9sszlk54b' AND t.instance_id = '04me86gy87lxe' AND t.source IN ('USER', 'BUSINESS_APP'); ```
Uploading file...
Sidebar
[[_TOC_]]
Edit message:
Cancel