我在网上搜索过,但无法确定如何向下面的这个 Sequelize 模型添加模式。下面的代码不会回滚错误,但是当我检查 postgres 数据库时,唯一的模式是 public 的默认模式。
// The model definition is done in /path/to/models/project.js
module.exports = function(sequelize, DataTypes) {
return sequelize.define("project", {
name: DataTypes.STRING,
description: DataTypes.TEXT,
},
define: {
schema: "prefix"
},
classMethods: {
method1: function() {},
method2: function() {}
},
instanceMethods: {
method3: function() {}
})
应如何修改脚本以准确定义模式?
编辑
就我而言,最终答案是
database_name.sequelize.createSchema('prefix').then(() => {...});
在我的 ./models/index.js 文件中,数据库对象如下:
database_name = {
Sequelize: Sequelize,
sequelize: sq,
table_1: sq.import(__dirname + '/file_folder')
};
module.exports = database_name;
最佳答案
您的模型定义应如下所示
module.exports = function(sequelize, DataTypes) {
return sequelize.define("project", {
name: DataTypes.STRING,
description: DataTypes.TEXT,
}, {
schema: 'prefix',
classMethods: {
method1: function() {},
method2: function() {}
},
instanceMethods: {
method3: function() {}
}
}
}
根据 options
的文档sequelize.define
方法中的对象,它可以具有名为 schema
的属性。
编辑 - 以编程方式创建模式
为了创建新模式(仅适用于 PostgreSQL!),您可以使用 sequelize.createSchema()
方法:
sequelize.createSchema('prefix').then(() => {
// new schema is created
});
上面创建给定的 SQL
CREATE SCHEMA prefix;
为了在模型定义中使用这个模式,你需要在将任何模型同步到数据库之前创建模式 - 它可以在 sequelize.sync()
之前运行,或者,如果你使用迁移, 作为第一个迁移文件。
关于node.js - PostgreSQL : How to accurately define a schema in a model? 的 Sequelize 架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42497254/