开发者社区> 问答> 正文

PostgreSQL内存表解析报错

druid 1.1.9

PostgreSQL用到内存表的SQL解析会报错,比如: String sql = "delete from account a using (values (1), (7)) as tmp(id) WHERE a.id = tmp.id";

String sql = "update student a set grade = tmp.grade from (values (1, 'A')) as tmp(id, grade) where a.id = tmp.id";

原提问者GitHub用户dingqianlong

展开
收起
山海行 2023-07-05 19:59:29 118 0
3 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    PostgreSQL中的内存表通常是指使用CREATE TEMPORARY TABLE语句创建的临时表,这些表只存在于当前会话中,在会话结束时会自动删除。如果您在使用内存表时遇到了解析错误,可能有以下几个常见的原因:

    语法错误:内存表的创建语法与普通表类似,但有一些细微的差异。例如,内存表的名称通常以pgtemp或pg_toasttemp开头,而不是普通表的名称。如果您在创建内存表时存在语法错误,则可能会导致解析错误。请检查您的SQL语句,确保它们符合内存表的语法规则。

    数据类型不兼容:内存表中的数据类型与普通表相同,但是在某些情况下,它们可能不兼容。例如,如果您在内存表中使用了与普通表不同的数据类型或数据类型长度,则可能会导致解析错误。请检查您的SQL语句,确保内存表中的数据类型与普通表相同。

    内存不足:内存表存储在内存中,如果内存不足,则可能会导致解析错误。如果您在创建内存表时遇到了解析错误,请检查系统的内存使用情况,并考虑增加系统内存。

    权限不足:如果您没有足够的权限来创建内存表,则可能会导致解析错误。请确保您具有足够的权限来创建临时表。

    2023-07-30 14:36:28
    赞同 展开评论 打赏
  • 这个问题可能是由于 druid 在解析 PostgreSQL 的 SQL 时,无法正确处理使用了“using”关键字的内存表。建议在 druid 的代码中添加对“using”关键字的支持,或者考虑使用其他的 SQL 解析器来处理 PostgreSQL 的 SQL。另外,在第二个 SQL 中,由于使用了“values”关键字,也可能会导致解析出错。建议在 druid 的代码中添加对“values”关键字的支持,或者考虑使用其他的 SQL 解析器来处理 PostgreSQL 的 SQL。

    2023-07-11 10:02:29
    赞同 展开评论 打赏
  • 问题已修复,请用新版本 https://github.com/alibaba/druid/releases/tag/1.1.14

    原回答者GitHub用户wenshao

    2023-07-06 11:16:22
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
神龙云服务器产品及技术深度解析 立即下载
弹性创造价值:基于ECS的最佳性价比实践解析 立即下载
又快又稳:阿里云下一代虚拟交换机解析 立即下载

相关镜像