Postgresql 参考视图表列作为参考

Postgresql 参考视图表列作为参考,postgresql,knex.js,Postgresql,Knex.js,当前设置: 我正在使用PostgreSQL、NodeJS和KNEX 存在两个表,active(task_active)和inactive(task_inactive),inactive由 搞砸 还有一个视图(任务)统一了这两个表,还有一个worker在任务完成时将行从活动移动到非活动 现在,我想将视图id用作另一个表(diff)中的外键 这是我的密码 import * as Knex from "knex"; export async function up(knex:

当前设置:

我正在使用PostgreSQL、NodeJS和KNEX

存在两个表,active(task_active)和inactive(task_inactive),inactive由 搞砸 还有一个视图(任务)统一了这两个表,还有一个worker在任务完成时将行从活动移动到非活动

现在,我想将视图id用作另一个表(diff)中的外键

这是我的密码

import * as Knex from "knex";


export async function up(knex: Knex): Promise<any> {
await (knex.schema.createTable("diff", (t) => {
t.increments("id");
t.boolean("numeric_change_value");
t.boolean("string_change_value");
t.integer("report_pair_id")
  .notNullable()
  .references("id")
  .inTable("task")
  .onDelete("CASCADE");
}) as PromiseLike<any>);
}


export async function down(knex: Knex): Promise<any> {
 await knex.schema.dropTable("diff");
}
从“Knex”导入*作为Knex;
导出异步函数up(knex:knex):承诺{
wait(knex.schema.createTable(“diff”,(t)=>{
t、 增量(“id”);
t、 布尔值(“数值变化值”);
t、 布尔值(“字符串变化值”);
t、 整数(“报告对id”)
.notNullable()
.参考(“id”)
.inTable(“任务”)
.onDelete(“级联”);
})作为承诺);
}
导出异步函数down(knex:knex):承诺{
wait knex.schema.dropTable(“diff”);
}

我得到的错误是任务不是表,这个错误是正确的,因为任务是视图。那么,是否有任何方法可以引用视图列或任何其他方法将新表(diff)附加到任务表?如果任何人都有一个使用SQL的解决方案,MY-SQL将会很有帮助。我可以将这些查询作为解决方案的参考。

请不要添加不相关的数据库标记,以免引起更多注意。“SQL”标记足以表示“generalsql”。但一般来说,外键只能引用实际表,而不能引用视图。因此,您试图实现的不是真正可能的SQL,删除了其他标记,现在我将研究一种不同的外键引用方法,SQL标记很好;)