开发者社区> 问答> 正文

druid-1.1.13-flyway-5.2.4-postgres对“set role” 解析报错

druid 1.1.13 flyway 5.2.4 postgres 9.6

2019-02-22 17:43:18.031 ERROR 13456 --- [ main] c.a.d.f.s.StatFilter : merge sql error, dbType postgresql, druid-1.1.13, sql : SET ROLE 'postgres'

com.alibaba.druid.sql.parser.ParserException: syntax error, error in :'ROLE 'postgres'', expect LITERAL_CHARS, actual LITERAL_CHARS pos 19, line 1, column 9, token LITERAL_CHARS postgres at com.alibaba.druid.sql.parser.SQLParser.printError(SQLParser.java:288) ~[druid-1.1.13.jar:1.1.13] at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:433) ~[druid-1.1.13.jar:1.1.13] at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:72) ~[druid-1.1.13.jar:1.1.13] at com.alibaba.druid.sql.visitor.ParameterizedOutputVisitorUtils.parameterize(ParameterizedOutputVisitorUtils.java:94) ~[druid-1.1.13.jar:1.1.13] at com.alibaba.druid.sql.visitor.ParameterizedOutputVisitorUtils.parameterize(ParameterizedOutputVisitorUtils.java:77) ~[druid-1.1.13.jar:1.1.13] at com.alibaba.druid.sql.visitor.ParameterizedOutputVisitorUtils.parameterize(ParameterizedOutputVisitorUtils.java:50) ~[druid-1.1.13.jar:1.1.13] at com.alibaba.druid.filter.stat.StatFilter.mergeSql(StatFilter.java:147) ~[druid-1.1.13.jar:1.1.13] at com.alibaba.druid.filter.stat.StatFilter.createSqlStat(StatFilter.java:648) ~[druid-1.1.13.jar:1.1.13] at com.alibaba.druid.filter.stat.StatFilter.statementPrepareAfter(StatFilter.java:311) ~[druid-1.1.13.jar:1.1.13] at com.alibaba.druid.filter.FilterEventAdapter.connection_prepareStatement(FilterEventAdapter.java:124) ~[druid-1.1.13.jar:1.1.13] at com.alibaba.druid.filter.FilterChainImpl.connection_prepareStatement(FilterChainImpl.java:568) ~[druid-1.1.13.jar:1.1.13]

原提问者GitHub用户xxfad

展开
收起
山海行 2023-07-05 19:41:09 90 0
2 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    说的是Druid 1.1.13在解析带有Postgres的"set role"语句时会报错。

    这是因为:

    Druid是用于解析SQL的库,主要支持主流的数据库,如MySQL、Oracle等。

    Postgres有一些特殊的SQL扩展语句,比如"set role"。Druid无法识别这些语句。

    Flyway 5.2.4是数据库版本控制工具,内部使用Druid解析SQL。

    当Flyway处理带有"set role"的Postgres脚本时,最终会交给Druid解析,然而Druid不支持"set role",所以就报错了。

    解决这个问题有几种方法:

    升级Druid版本。后续版本可能添加了对Postgres特殊语句的支持。

    更改Flyway自己的SQL解析器。 Flyway可以内置专门针对Postgres优化的解析器。

    避免使用"set role"语句。使用Druid支持的标准SQL语法。

    将"set role"语句单独提取到脚本中。不放在Flyway自动处理的脚本里面。

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

    原回答者GitHub用户wenshao

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

相关电子书

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

相关镜像