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

Knex的returning方法能否返回PostgreSQL的pg_column_size计算结果?

你遇到的报错原因确实是Knex默认会将returning方法的字符串参数识别为表列名,自动添加引号转义,导致整个函数表达式被误识别为不存在的列名。要实现你的需求,直接用knex.raw包裹原生SQL片段即可,这部分内容Knex不会做额外转义,会原样拼接进RETURNING子句:

示例代码

const result = await knex('MyTable')
  .insert({ MyColumn: 'Whatever' })
  .returning([
    'ID',
    // 用raw包裹函数表达式,as指定返回字段别名
    knex.raw('pg_column_size("MyColumn") as pg_column_size')
  ])

// 返回结果格式示例:[{ ID: 4, pg_column_size: 9 }]
console.log(result)

如果需要验证最终生成的SQL是否符合预期,可以调用toSQL()方法打印:

const generateSql = knex('MyTable')
  .insert({ MyColumn: 'Whatever' })
  .returning([
    'ID',
    knex.raw('pg_column_size("MyColumn") as pg_column_size')
  ])
  .toSQL()

console.log(generateSql.sql)
// 输出:insert into "MyTable" ("MyColumn") values ($1) returning "ID", pg_column_size("MyColumn") as pg_column_size

该方案无需额外执行SELECT查询,完全和原生SQL的执行逻辑一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:15:07