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; 

       

网上收集的解决方案 "PostgreSQL的Sequelize模式:如何在模型中准确定义模式?"

你的模型定义应该如下所示

 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表。