【问题标题】:How do I do a cascade drop using Knex.js in PostgreSQL?如何在 PostgreSQL 中使用 Knex.js 进行级联删除?
【发布时间】:2014-09-25 10:52:10
【问题描述】:

我在尝试删除另一个表(页面)引用的表(应用程序)时遇到此错误。

knex.schema.dropTable("application").exec();

错误是

Possibly unhandled error: cannot drop table application because other objects depend on it
at Connection.parseE (/home/balan/node_modules/pg/lib/connection.js:526:11)
at Connection.parseMessage (/home/balan/node_modules/pg/lib/connection.js:356:17)
at Socket.<anonymous> (/home/balan/node_modules/pg/lib/connection.js:105:22)
at Socket.EventEmitter.emit (events.js:95:17)
at Socket.<anonymous> (_stream_readable.js:745:14)
at Socket.EventEmitter.emit (events.js:92:17)
at emitReadable_ (_stream_readable.js:407:10)
at emitReadable (_stream_readable.js:403:5)
at readableAddChunk (_stream_readable.js:165:9)
at Socket.Readable.push (_stream_readable.js:127:10)

【问题讨论】:

    标签: postgresql bookshelf.js knex.js


    【解决方案1】:

    我只是用原始 sql 来做: return knex.raw('DROP TABLE application CASCADE');

    【讨论】:

      【解决方案2】:

      对于新人;如果您不想为删除外键和其他约束而苦恼,您可以这样做:

      const tables = [
          'tags',
          'users',
          'categories',
          'posts',
        ]
      exports.down = function(knex) {
       return Promise.all(tables.map(async function (table) {
          try {
            console.log(table, 'down start')
            await knex.raw(`DROP TABLE IF EXISTS "${table}" CASCADE`)
            console.log(table, 'down finish')
          } catch (err) {
            console.error(err.detail)
          }
      
          return true
        }))
      };
      

      【讨论】:

        猜你喜欢
        • 2015-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-07
        • 2022-09-28
        • 2018-07-19
        • 2016-03-06
        相关资源
        最近更新 更多