Sequelize 迁移中的承诺链 - 关系不存在
Promise chaining in Sequelize migrations - relation does not exist
这个简单的测试代码:
return queryInterface.createTable('tadam', {id: Sequelize.INTEGER, humus: Sequelize.STRING(255)})
.then(queryInterface.sequelize.query('ALTER TABLE tadam ADD PRIMARY KEY (id)'));
returns 出现以下错误:
Unhandled rejection SequelizeDatabaseError: relation "tadam" does not exist
现在,我了解到在执行第二个承诺(关于更改 table)时,table 尚未创建。
不可能,因为迁移中的所有查询都是同时执行的,因为我有,f.e。此测试迁移:
return queryInterface.sequelize.query('ALTER TABLE tadam DROP CONSTRAINT tadam_pkey')
.then(queryInterface.removeIndex('tadam', 'tadam_pkey'));
而且效果很好。
那么,谁能解释为什么第一个不起作用以及我如何实现它,以便可以从单个迁移中执行 table + 添加 PK 的创建?
这是链接需要串行执行的承诺时的常见错误。您将 queryInterface.sequelize.query('ALTER TABLE tadam ADD PRIMARY KEY (id)')
直接传递给 then()
,这意味着它会立即 运行(即在 table 创建之前,因为第一个承诺尚未完成).
您需要 return 来自函数的承诺,如下所示:
return queryInterface.createTable('tadam', {id: Sequelize.INTEGER, humus: Sequelize.STRING(255)})
.then(function(results) {
// results will be the result of the first query
return queryInterface.sequelize.query('ALTER TABLE tadam ADD PRIMARY KEY (id)');
});
这个简单的测试代码:
return queryInterface.createTable('tadam', {id: Sequelize.INTEGER, humus: Sequelize.STRING(255)})
.then(queryInterface.sequelize.query('ALTER TABLE tadam ADD PRIMARY KEY (id)'));
returns 出现以下错误:
Unhandled rejection SequelizeDatabaseError: relation "tadam" does not exist
现在,我了解到在执行第二个承诺(关于更改 table)时,table 尚未创建。
不可能,因为迁移中的所有查询都是同时执行的,因为我有,f.e。此测试迁移:
return queryInterface.sequelize.query('ALTER TABLE tadam DROP CONSTRAINT tadam_pkey')
.then(queryInterface.removeIndex('tadam', 'tadam_pkey'));
而且效果很好。
那么,谁能解释为什么第一个不起作用以及我如何实现它,以便可以从单个迁移中执行 table + 添加 PK 的创建?
这是链接需要串行执行的承诺时的常见错误。您将 queryInterface.sequelize.query('ALTER TABLE tadam ADD PRIMARY KEY (id)')
直接传递给 then()
,这意味着它会立即 运行(即在 table 创建之前,因为第一个承诺尚未完成).
您需要 return 来自函数的承诺,如下所示:
return queryInterface.createTable('tadam', {id: Sequelize.INTEGER, humus: Sequelize.STRING(255)})
.then(function(results) {
// results will be the result of the first query
return queryInterface.sequelize.query('ALTER TABLE tadam ADD PRIMARY KEY (id)');
});