Knex截断表具有外键约束

时间:2016-04-07 20:14:40

标签: javascript mysql truncate knex.js

是否可以强制截断具有外键约束的表,以便还删除受影响的其他表中的所有行?

我无法在文档中看到传递给knex('tableName').truncate()方法的选项。

3 个答案:

答案 0 :(得分:7)

我还没有找到一种内置方法来做到这一点,所以我只是进入原始模式:

 knex.raw('TRUNCATE TABLE users, products CASCADE')

您还可以将其设置为在迁移中自动进行:

exports.up = function(knex) {
  return knex.schema.createTable('users_products', (t) => {
      t.uuid('id').primary().defaultTo(knex.raw('uuid_generate_v4()'));
      t.uuid('user_id').notNullable().references('id').inTable('users').onDelete('CASCADE');
      t.uuid('product_id').notNullable().references('id').inTable('products').onDelete('CASCADE');
  });
};

答案 1 :(得分:0)

我无法在 Jest 集成测试后使用 Knex 进行清理,因此我直接使用了 Node PostGres(即 pg),如下所示:

  const { Pool } = require('pg')
  const connectionString = 'postgresql://dbuser:secretpassword@database.server.com:3211/mydb';
  const pool = new Pool({
    connectionString,
  })
  pool.query('TRUNCATE myTable RESTART IDENTITY CASCADE;', (err, res) => {
    console.log(err, res)
    pool.end()
  })

答案 2 :(得分:-3)

现在Knexjs中有一个truncate()方法。

knex('accounts').truncate()
Outputs:
truncate `accounts`

可能不适用于所有情况,但应该可以满足基本的截断需求。