基于节点的SQL构建器,支持Common Table Expression(WITH子句)

fel*_*rez 5 sql postgresql node.js amazon-redshift

我正在构建一个Node.js应用程序,需要使用CTE查询Redshift数据库(基于postgres 8.0.2).不幸的是,到目前为止我看过的SQL查询构建器(node-sql,knex.js和sequelize)似乎不支持公用表表达式(CTE).

我使用Jeremy Evans的Sequel gem在Ruby中形成公共表表达式非常成功,它有一个with方法,它接受两个参数来定义表的别名和数据集引用.我想在Node中有类似的东西.

我是否错过了Node.js SQL查询构建器的任何明显竞争者?据我所知,这些是最明显的四个:

  • 节点-SQL
  • nodesql(没有postgres支持?)
  • knex.js
  • sequelize

fel*_*rez 3

我能够将公用表表达式 (CTE) 与knex.js结合使用,这非常简单。

假设您正在使用 socket.io 和 knex.js,

knex-example.js

function knexExample (io, knex) {
  io.on('connection', function (socket) {
    var this_cte = knex('this_table').select('this_column');

    var that_cte = knex('that_table').select('that_column');

    knex.raw('with t1 as (' + this_cte + 
    '), t2 as (' + that_cte + ')' + 
    knex.select(['this', 'that'])
      .from(['t1', 't2'])
    )
    .then(function (rows) {
      socket.emit('this_that:update', rows);
    });
  })
}

module.exports = knexExample;
Run Code Online (Sandbox Code Playgroud)

  • 另请参阅 [knex 问题 #716](https://github.com/tgriesser/knex/issues/716),了解在 knex 中实现对 CTE 的一流支持。 (2认同)