web-dev-qa-db-ja.com

PostgreSQLのスキーマを続編する:モデルでスキーマを正確に定義する方法は?

ネット全体を検索しましたが、以下のこの続編モデルにスキーマを追加する方法を特定できませんでした。次のコードはエラーをキックバックしませんが、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;
5
Val

モデル定義は次のようになります。

_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()の前に実行するか、移行を使用する場合は最初の移行ファイルとして実行できます。

9
piotrbienias

次のように、テーブル移行ファイルの作成でスキーマを定義する必要があると思います。

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.
  }   
1
Edward Smith

このコードは、「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にテーブルが作成されます。

0
krys Funtain