无需加双引号,如何在DBeaver中直接使用EF Core生成的PostgreSQL查询?
解决DBeaver直接运行EF Core生成的PostgreSQL SQL报错问题
这个问题本质是PostgreSQL的标识符大小写规则和DBeaver默认行为的冲突:EF Core生成的SQL里的表/字段名是大小写混合的(比如UserProfile、CreatedAt),而PostgreSQL会把未加双引号的标识符自动转为小写——但你的数据库表/字段是EF Core用双引号创建的(所以实际名称是大小写敏感的"UserProfile"而不是小写的userprofile),这就导致DBeaver执行未加双引号的SQL时找不到对象,触发42P01(表不存在)或42703(字段不存在)错误。
下面是具体的DBeaver配置步骤,让你直接粘贴EF生成的SQL就能运行:
方法1:修改单个连接的标识符处理设置
- 在DBeaver中找到你的PostgreSQL连接,右键点击它,选择「编辑连接」
- 在弹出的窗口中切换到「SQL编辑器」标签页
- 找到「标识符」区域,勾选**「自动引用标识符」,并将「大小写转换」设置为「保留原样」**
- 点击「确定」保存设置,重新连接数据库后再测试
方法2:全局配置所有SQL编辑器的行为
如果你希望所有PostgreSQL连接都生效,可以修改全局偏好设置:
- 打开DBeaver的偏好设置:Windows/Linux点击「编辑」→「偏好设置」;Mac点击「DBeaver」→「偏好设置」
- 导航到「数据库」→「SQL编辑器」→「格式化」
- 在「标识符」部分:
- 将「大小写转换」改为**「保留原样」**
- 勾选**「引用大小写混合的标识符」**
- 保存设置后,重启DBeaver生效
验证设置
粘贴一段EF Core生成的SQL(比如SELECT Id, Email FROM UserProfile WHERE CreatedAt > '2024-01-01'),DBeaver现在会自动把大小写混合的标识符加上双引号,转成PostgreSQL能识别的SELECT "Id", "Email" FROM "UserProfile" WHERE "CreatedAt" > '2024-01-01',不会再触发报错。
另外补充一点:如果你的EF Core配置是刻意保留了模型的大小写(比如没有使用小写命名约定),那么数据库里的对象确实是大小写敏感的,上面的配置就是让DBeaver自动适配这种情况,不用手动加双引号。
内容的提问来源于stack exchange,提问作者Eric Ouellet
相关产品推荐
相关产品推荐

