ネット全体を検索しましたが、以下のこの続編モデルにスキーマを追加する方法を特定できませんでした。次のコードはエラーをキックバックしませんが、postgres DBを検査すると、パブリックのデフォルトのスキーマは唯一のスキーマです。
// 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
という属性を持つことができます。
[〜#〜]編集[〜#〜]-プログラムによるスキーマの作成
新しいスキーマを作成するには(PostgreSQLのみ!)、 sequelize.createSchema()
を使用できます。方法:
_sequelize.createSchema('prefix').then(() => {
// new schema is created
});
_
上記は与えられたSQLを作成します
_CREATE SCHEMA prefix;
_
このスキーマをモデル定義で使用するには、モデルをデータベースに同期する前にスキーマを作成する必要があります。スキーマはsequelize.sync()
の前に実行するか、移行を使用する場合は最初の移行ファイルとして実行できます。
次のように、テーブル移行ファイルの作成でスキーマを定義する必要があると思います。
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: '[email protected]',
birthday: new Date(1977, 6, 11)
}))
.then(jane => {
console.log(jane.toJSON());
res.send(jane);
res.status(200);
});
これにより、デフォルトのスキーマではなく、スキーマpublicにテーブルが作成されます。