PostgreSQL的Sequelize架构:如何在模型中准确定义架构?

Val*_*Val 4 postgresql schema database-schema node.js sequelize.js

我在整个网络中搜索并且无法确定如何在下面的这个续集模型中添加模式.以下代码不会回显错误,但是当我检查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() {}
  })
Run Code Online (Sandbox Code Playgroud)

如何修改脚本以准确定义架构?

编辑

就我而言,最终答案是

 database_name.sequelize.createSchema('prefix').then(() => {...});
Run Code Online (Sandbox Code Playgroud)

在我的./models/index.js文件中,数据库对象如下:

database_name = {
    Sequelize: Sequelize,
    sequelize: sq,
    table_1: sq.import(__dirname + '/file_folder')
 };

module.exports = database_name;
Run Code Online (Sandbox Code Playgroud)

pio*_*ias 8

您的模型定义应如下所示

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() {}
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

根据方法中options对象的文档sequelize.define,它可以有属性调用schema.

编辑 - 以编程方式创建模式

为了创建一个新的模式(仅适用于PostgreSQL!),您可以使用以下sequelize.createSchema()方法:

sequelize.createSchema('prefix').then(() => {
    // new schema is created
});
Run Code Online (Sandbox Code Playgroud)

上面创建了给定的SQL

CREATE SCHEMA prefix;
Run Code Online (Sandbox Code Playgroud)

为了在模型定义中使用此模式,您需要在将任何模型同步到数据库之前创建模式 - 它可以在之前运行,sequelize.sync()或者,如果使用迁移,则可以作为第一个迁移文件运行.