我在整个网络中进行了搜索,但无法确定如何在下面的此续集模型中添加架构。以下代码不会回显错误,但是当我检查postgres DB时,唯一的模式是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;
答案 0 :(得分:6)
您的模型定义应如下所示
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() {}
}
}
}
根据sequelize.define
方法中options
对象的文档,它可以包含名为schema
的属性。
编辑 - 以编程方式创建架构
为了创建一个新的模式(仅适用于PostgreSQL!),您可以使用sequelize.createSchema()
方法:
sequelize.createSchema('prefix').then(() => {
// new schema is created
});
上面创建给定的SQL
CREATE SCHEMA prefix;
为了在模型定义中使用此模式,您需要在将任何模型同步到数据库之前创建模式 - 它可以在sequelize.sync()
之前运行,或者,如果使用迁移,则可以作为第一个迁移文件运行。
答案 1 :(得分:0)
我认为您需要在create table migration file中定义架构,如下所示:
queryInterface.createTable(
'nameOfTheNewTable',
{
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
createdAt: {
type: Sequelize.DATE
},
updatedAt: {
type: Sequelize.DATE
},
attr1: Sequelize.STRING,
attr2: Sequelize.INTEGER,
attr3: {
type: Sequelize.BOOLEAN,
defaultValue: false,
allowNull: false
},
//foreign key usage
attr4: {
type: Sequelize.INTEGER,
references: {
model: 'another_table_name',
key: 'id'
},
onUpdate: 'cascade',
onDelete: 'cascade'
}
},
{
engine: 'MYISAM', // default: 'InnoDB'
charset: 'latin1', // default: null
schema: 'prefix' // default: public, PostgreSQL only.
}
答案 2 :(得分:0)
此代码适用于" sequelize":" ^ 4.23.2"," pg":" ^ 7.4.0",& #34; pg-hstore":" ^ 2.3.2",
const User = sequelize.define('people', {
uuid: {
type: Sequelize.UUID,
defaultValue: Sequelize.UUIDV1,
primaryKey: true
},
username: Sequelize.STRING,
email: Sequelize.STRING,
birthday: Sequelize.DATE
}, {
schema: 'public',
});
sequelize.sync()
.then(() => User.create({
username: 'MartialDoane',
email: 'martial-doane@gmail.com',
birthday: new Date(1977, 6, 11)
}))
.then(jane => {
console.log(jane.toJSON());
res.send(jane);
res.status(200);
});
这将在架构公共中创建表,而不是我的默认架构。