You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Knex更新PostgreSQL数组时遇TypeError: knex.raw is not a function

错误原因及解决办法

出现TypeError: knex.raw is not a function的核心原因是你代码里的knex变量并不是初始化后的Knex实例,具体分两种常见情况:

  • 情况1:调用了未定义的knex变量
    你代码里操作数据库用的是db(比如db('users')),说明db是你已经配置好的Knex实例,但调用raw方法时误用了未定义或未正确初始化的knex变量。正确做法是用db.raw替代knex.raw。

    修改后的代码:

    app.put('/groceryList', (req, res) => {
        const { id, listUpdated } = req.body;
        db('users')
        .where('id', '=', id)
        .update({
            grocerylist: db.raw('array_append(grocerylist, ?)', listUpdated)
        })
        .catch(err => res.status(400).json('error returning grocery list'))
    })
    
  • 情况2:导入的是Knex构造函数而非实例
    如果你的代码里knex是直接导入的Knex库(比如const knex = require('knex')),这只是构造函数,不是已经连接数据库的实例。必须先通过配置初始化实例后才能调用raw方法,而你代码里的db就是这个已初始化的实例,所以直接用db.raw即可。

额外提醒:PostgreSQL的array_append仅支持添加单个元素,如果listUpdated是数组类型,想要批量添加元素应该改用array_cat函数。

内容的提问来源于stack exchange,提问作者user20393015

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 04:25:17