alibaba / druid

阿里云计算平台DataWorks(https://help.aliyun.com/document_detail/137663.html) 团队出品,为监控而生的数据库连接池
https://github.com/alibaba/druid/wiki
Apache License 2.0
27.88k stars 8.57k forks source link

postgresql 执行distinct on 查询时报错 #5054

Open ericbin opened 1 year ago

ericbin commented 1 year ago

当我执行以下命令时,在postgresql下完全正常 select distinct on(device_id) * FROM vehicle

在druid 中 会报以下错误:

Cause: java.sql.SQLException: sql injection violation, dbType postgresql, , druid-version 1.2.16, syntax error: ERROR. pos 71, line 1, column 71, token ) : SELECT COUNT() FROM (SELECT DISTINCT ON (device_id) FROM vehicle) TOTAL ; uncategorized SQLException; SQL state [null]; error code [0]; sql injection violation, dbType postgresql, , druid-version 1.2.15, syntax error: ERROR. pos 71, line 1, column 71, token ) : SELECT COUNT() FROM (SELECT DISTINCT ON (device_id) FROM gs_vehicle) TOTAL; nested exception is java.sql.SQLException: sql injection violation, dbType postgresql,

通过单元测试,也报以下错误: Exception in thread "main" com.alibaba.druid.sql.parser.EOFParserException: EOF at com.alibaba.druid.sql.parser.SQLExprParser.primary(SQLExprParser.java:1092) at com.alibaba.druid.sql.dialect.postgresql.parser.PGExprParser.primary(PGExprParser.java:150) at com.alibaba.druid.sql.parser.SQLExprParser.expr(SQLExprParser.java:104) at com.alibaba.druid.sql.parser.SQLExprParser.parseSelectItem(SQLExprParser.java:6310) at com.alibaba.druid.sql.parser.SQLSelectParser.parseSelectList(SQLSelectParser.java:1052) at com.alibaba.druid.sql.dialect.postgresql.parser.PGSelectParser.query(PGSelectParser.java:103) at com.alibaba.druid.sql.parser.SQLSelectParser.select(SQLSelectParser.java:61) at com.alibaba.druid.sql.dialect.postgresql.parser.PGSQLStatementParser.parseSelect(PGSQLStatementParser.java:416) at com.alibaba.druid.sql.dialect.postgresql.parser.PGSQLStatementParser.parseSelect(PGSQLStatementParser.java:30) at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:200) at com.alibaba.druid.sql.SQLUtils.parseStatements(SQLUtils.java:596) at com.alibaba.druid.sql.SQLUtils.parseStatements(SQLUtils.java:617) at com.alibaba.druid.sql.PagerUtils.limit(PagerUtils.java:55) at com.alibaba.druid.postgresql.PGLimitTest.main(PGLimitTest.java:18)

Loongphy commented 1 year ago

+1