PostgreSQL的Sequelize模式:如何在模型中准确定义模式?
我search了整个networking,并没有能够确定如何添加一个模式到这个下面的续集模型。 下面的代码不会反弹错误,但是当我检查postgres数据库时,唯一的模式是公共的默认模式。
// 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() {} } } }
根据sequelize.define
方法中的options
对象的文档,它可以具有称为schema
属性。
编辑 – 以编程方式创build模式
为了创build一个新的模式(仅适用于PostgreSQL!),您可以使用sequelize.createSchema()
方法:
sequelize.createSchema('prefix').then(() => { // new schema is created });
上面创build给定的SQL
CREATE SCHEMA prefix;
为了在模型定义中使用此模式,需要在将任何模型同步到数据库之前创build模式 – 可以在sequelize.sync()
之前运行,或者如果使用迁移,则可以作为第一个迁移文件运行。
我认为你需要在创build表迁移文件中定义模式,如下所示:
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. }
此代码适用于“sequelize”:“^ 4.23.2”,“pg”:“^ 7.4.0”,“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); });
这将在模式公共而不是我的默认架构中创build表。