您可以使用原始 SQL 定义的 Knex.js 创建视图吗?

Can you create views using Knex.js defined by raw SQL?

编写迁移以创建基于原始视图的视图 SQL 无提示失败。没有出现错误消息,但没有在数据库中创建任何内容。

下面的代码使用通用查询(实际查询使用 window 函数,因此需要原始 SQL)。

const DAILY_SESSIONS_QUERY = `select session_ids from sessions group by days`;

export async function up(knex: Knex): Promise<void> {
  knex.schema.createViewOrReplace('daily_sessions_view', function (view) {
    knex.raw(DAILY_SESSIONS_QUERY);
  })
}

最终弄清楚并得出以下结果:

const DAILY_SESSIONS_QUERY = `(select session_ids from sessions group by days) as q`;

export async function up(knex: Knex): Promise<void> {
    return knex.schema.createViewOrReplace('daily_sessions_view', function (view) {
        view.columns(['session_ids']);
        view.as(knex.select('*').fromRaw(DAILY_SESSIONS_QUERY));
    })
}