[英]Why don't the Sequelize migrations work properly with schemas other than public?
我正在使用 Sequelize CLI 執行遷移,它似乎不能很好地處理“公共”之外的模式。 我運行了一系列測試,看起來即使我在 Sequelize 命令的“選項”中提供了架構,它也只適用於某些而不適用於其他。
例如,我可以在“向上”部分創建一個表,它以正確的模式結束,但在“向下”部分失敗,因為它無法在公共場合找到該表:
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable("migration_test", {
name: Sequelize.DataTypes.STRING,
isBetaMember: {
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false
}
}, {
schema: "profile"
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable("migration_test", {
schema: "profile"
});
}
};
該表已正確創建:
執行(默認):CREATE TABLE IF NOT EXISTS "profile"."migration_test" ("name" VARCHAR(255), "isBetaMember" BOOLEAN NOT NULL DEFAULT false);
但是,在“向下”時:
執行(默認):DROP TABLE IF EXISTS "migration_test";
該表顯然沒有被刪除,所以不是很有用。 SequelizeMeta 表以“公共”模式結束,如果必須的話,我可以接受。
我也嘗試了 addColumn,但甚至無法識別“schema”屬性:
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.addColumn(
"migration_test",
"test_column_1",
Sequelize.STRING(100), {
schema: "profile"
}
);
},
down: (queryInterface, Sequelize) => {
return queryInterface.removeColumn("migration_test", "test_column_1", {
schema: "profile"
});
}
};
...拋出錯誤:
執行(默認):ALTER TABLE "public"."migration_test" ADD COLUMN "test_column_1" VARCHAR(100);
錯誤:關系“public.migration_test”不存在
我做錯了什么,還是這只是 state 的事情? 這不是為了處理 pg 模式而構建的,這似乎不可思議? 與使用此框架相比,我最好使用 db-migrate 之類的東西還是只為數據庫更改編寫一次性 SQL 腳本?
如果它不是public
,最好明確指示模式:
const table = { schema: SchemaName, tableName: TableName };
module.exports = {
up: (queryInterface: QueryInterface): Promise<void> => queryInterface.sequelize.transaction(
async (transaction) => {
await queryInterface.createTable(table, attributes, { transaction });
}
),
down: (queryInterface: QueryInterface): Promise<void> => queryInterface.sequelize.transaction(
async (transaction) => {
await queryInterface.dropTable(table as any, { transaction });
}
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.