knex在migration中执行查询生成无效SQL语句问题求助
Knex迁移场景查询生成无效SQL问题解决方案
问题根因
你遇到的SELECT * with no tables specified is not valid报错,是0.95.x~1.0.x区间部分版本Knex的解析缺陷:
在迁移上下文无参数调用knex.select()时,框架会错误将后续.from()对应的查询逻辑识别为子查询,最终生成外层套了冗余select (select *)的无效SQL。
修复方案
按推荐优先级排序可选择以下三种方案:
- 直接省略冗余的
select()调用,Knex默认会查询表中所有字段,该写法在全版本Knex中均可正常解析:
await knex('account_types').where({ key: t.key }).first()
- 给
select()方法显式传入查询字段参数,哪怕是通配符*即可修复解析异常:
await knex.select('*').from('account_types').where({ key: t.key }).first()
- 如果上述两种改法仍不生效,排查当前迁移文件是否全局自定义过Knex查询构造器的默认逻辑,移除自定义的默认select配置即可。
内容的提问来源于stack exchange,提问作者Todd
相关产品推荐
相关产品推荐

