开发者社区> 问答> 正文

Postgresql 排序添加 nulls first 报错

##测试表结构 create table com_demo ( id int8 not null, name varchar(32), sex varchar(4), age int4 ); alter table com_demo add constraint com_demo_pkey primary key (id); insert into com_demo values (1, '张三', '男', 28); insert into com_demo values (2, '李四', '女', 36); insert into com_demo values (3, '王五', NULL, 19); insert into com_demo values (4, '赵六', NULL, 27);

##查询SQL(数据库级别执行没问题,经过DRUID报错) select * from com_demo order by sex asc nulls first

##报错 sql injection violation,syntax error:TODO pos 51,line 1, column 46,token FIRST:select * from com_demo order by sex asc nulls first

##定位原因,PG词法分析器关键字集合有first没有last,last正常first报错,map中删掉first正常,具体原因还不知道 com.alibaba.druid.sql.dialect.postgresql.parser.PGLexer

原提问者GitHub用户1176896650

展开
收起
山海行 2023-07-05 18:10:51 245 0
3 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    在 PostgreSQL 中,可以使用 NULLS FIRST 或 NULLS LAST 指定空值在排序时应该排在前面或后面。如果您在排序时添加 NULLS FIRST 或 NULLS LAST 时出现了错误,可能是因为使用的 PostgreSQL 版本不支持该语法或者语法错误。
    如果您在排序时添加 NULLS FIRST 或 NULLS LAST 报错,可以检查以下几个方面:

    检查 PostgreSQL 版本。在使用 NULLS FIRST 或 NULLS LAST 时,需要确保使用的 PostgreSQL 版本支持该语法。如果您使用的是较旧的 PostgreSQL 版本,可能不支持该语法,需要升级到较新的版本。

    检查语法错误。在使用 NULLS FIRST 或 NULLS LAST 时,需要确保语法正确,并遵循 PostgreSQL 的语法规范。可以使用 SQL 调试工具或者其他方式检查语法错误,并进行修正。

    检查排序列是否存在空值。在使用 NULLS FIRST 或 NULLS LAST 时,需要确保要排序的列存在空值。如果该列不存在空值,则无法使用 NULLS FIRST 或 NULLS LAST 进行排序。

    2023-07-30 20:17:26
    赞同 展开评论 打赏
  • ,您在使用Druid查询SQL时遇到了SQL注入漏洞。该漏洞可能是由于Druid的SQL解析器没有正确处理SQL语句中的关键字导致的。具体来说,您在查询语句中使用了“first”关键字,但是Druid的SQL解析器将其解析为一个错误的语法结构,导致查询失败。
    为了解决这个问题,您可以考虑使用Druid的SQL解析器来自定义SQL解析器,以便能够正确处理SQL语句中的关键字。具体来说,您可以使用Druid的SQL解析器来实现一个自定义的SQL解析器,该解析器能够正确处理SQL语句中的关键字,从而避免出现SQL注入漏洞。

    2023-07-09 10:22:14
    赞同 展开评论 打赏
  • 问题已修复,请用新版本

    https://github.com/alibaba/druid/releases/tag/1.2.5

    原回答者GitHub用户wenshao

    2023-07-06 10:45:38
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PostgreSQL 物联网六脉神剑 立即下载
PostgreSQL在哈啰的实践-周飞 立即下载
PostgreSQL高并发数据库应用数据 立即下载

相关镜像