メインコンテンツにスキップ
バージョン: v6 - 安定版

ダイアレクト固有事項

基盤となるコネクタライブラリ

MySQL

SequelizeがMySQLで使用する基盤となるコネクタライブラリは、mysql2 npmパッケージ(バージョン1.5.2以上)です。

Sequelizeコンストラクタの`dialectOptions`を使用して、カスタムオプションを提供できます。

const sequelize = new Sequelize('database', 'username', 'password', {
dialect: 'mysql',
dialectOptions: {
// Your mysql2 options here
},
});

`dialectOptions`はMySQL接続コンストラクタに直接渡されます。オプションの完全なリストは、MySQLドキュメントにあります。

MariaDB

SequelizeがMariaDBで使用する基盤となるコネクタライブラリは、mariadb npmパッケージです。

Sequelizeコンストラクタの`dialectOptions`を使用して、カスタムオプションを提供できます。

const sequelize = new Sequelize('database', 'username', 'password', {
dialect: 'mariadb',
dialectOptions: {
// Your mariadb options here
// connectTimeout: 1000
},
});

`dialectOptions`はMariaDB接続コンストラクタに直接渡されます。オプションの完全なリストは、MariaDBドキュメントにあります。

SQLite

SequelizeがSQLiteで使用する基盤となるコネクタライブラリは、sqlite3 npmパッケージ(バージョン4.0.0以上)です。
sqlite3@^4のセキュリティ脆弱性のため、sqlite3@^5.0.3へのアップデートが不可能な場合は、@vscode/sqlite3フォークを使用することをお勧めします。

Sequelizeコンストラクタで`storage`オプションを使用してストレージファイルを指定します(インメモリSQLiteインスタンスの場合は`:memory:`を使用します)。

Sequelizeコンストラクタの`dialectOptions`を使用して、カスタムオプションを提供できます。

import { Sequelize } from 'sequelize';
import SQLite from 'sqlite3';

const sequelize = new Sequelize('database', 'username', 'password', {
dialect: 'sqlite',
storage: 'path/to/database.sqlite', // or ':memory:'
dialectOptions: {
// Your sqlite3 options here
// for instance, this is how you can configure the database opening mode:
mode: SQLite.OPEN_READWRITE | SQLite.OPEN_CREATE | SQLite.OPEN_FULLMUTEX,
},
});

SQLiteの`dialectOptions`には、以下のフィールドを渡すことができます。

PostgreSQL

SequelizeがPostgreSQLで使用する基盤となるコネクタライブラリは、pgパッケージです(Node 10と12の場合は、pgバージョン7.0.0以上を使用してください。Node 14以上では、pgドキュメントに従って、pgバージョン8.2.x以上を使用する必要があります)。pg-hstoreモジュールも必要です。

Sequelizeコンストラクタの`dialectOptions`を使用して、カスタムオプションを提供できます。

const sequelize = new Sequelize('database', 'username', 'password', {
dialect: 'postgres',
dialectOptions: {
// Your pg options here
},
});

Postgresの`dialectOptions`には、以下のフィールドを渡すことができます。

  • `application_name`:pg_stat_activityにおけるアプリケーションの名前。詳細はPostgresドキュメントを参照してください。
  • `ssl`:SSLオプション。詳細は`pg`ドキュメントを参照してください。
  • `client_encoding`://'auto'を設定すると、クライアントのLC_CTYPE環境変数に基づいてロケールが決定されます。詳細はPostgresドキュメントを参照してください。
  • `keepAlive`:TCP KeepAliveを有効にするブール値。詳細は`pg`変更ログを参照してください。
  • `statement_timeout`:設定された時間(ミリ秒)後にクエリをタイムアウトさせます。pg v7.3で追加されました。詳細はPostgresドキュメントを参照してください。
  • `idle_in_transaction_session_timeout`:指定された時間(ミリ秒)よりも長くアイドル状態だった、開いているトランザクションを持つセッションを終了します。詳細はPostgresドキュメントを参照してください。

Unixドメインソケット経由で接続するには、`host`オプションにソケットディレクトリへのパスを指定します。ソケットパスは`/`で始まる必要があります。

const sequelize = new Sequelize('database', 'username', 'password', {
dialect: 'postgres',
host: '/path/to/socket_directory',
});

sequelizeのデフォルトの`client_min_messages`設定は`WARNING`です。

Redshift

ほとんどの設定は上記のPostgreSQLと同じです。

Redshiftは`client_min_messages`をサポートしていません。設定をスキップするには「ignore」が必要です。

const sequelize = new Sequelize('database', 'username', 'password', {
dialect: 'postgres',
dialectOptions: {
// Your pg options here
// ...
clientMinMessages: 'ignore', // case insensitive
},
});

Microsoft SQL Server (MSSQL)

SequelizeがMSSQLで使用する基盤となるコネクタライブラリは、tedious npmパッケージ(バージョン6.0.0以上)です。

Sequelizeコンストラクタの`dialectOptions.options`を使用して、カスタムオプションを提供できます。

const sequelize = new Sequelize('database', 'username', 'password', {
dialect: 'mssql',
dialectOptions: {
// Observe the need for this nested `options` field for MSSQL
options: {
// Your tedious options here
useUTC: false,
dateFirst: 1,
},
},
});

オプションの完全なリストは、tediousドキュメントにあります。

MSSQLドメインアカウント

ドメインアカウントで接続するには、次の形式を使用します。

const sequelize = new Sequelize('database', null, null, {
dialect: 'mssql',
dialectOptions: {
authentication: {
type: 'ntlm',
options: {
domain: 'yourDomain',
userName: 'username',
password: 'password',
},
},
options: {
instanceName: 'SQLEXPRESS',
},
},
});

Snowflake (実験的)

SequelizeがSnowflakeで使用する基盤となるコネクタライブラリは、snowflake-sdk npmパッケージです。

アカウントに接続するには、次の形式を使用します。

const sequelize = new Sequelize('database', null, null, {
dialect: 'snowflake',
dialectOptions: {
// put your snowflake account here,
account: 'myAccount', // my-app.us-east-1

// below option should be optional
role: 'myRole',
warehouse: 'myWarehouse',
schema: 'mySchema',
},
// same as other dialect
username: 'myUserName',
password: 'myPassword',
database: 'myDatabaseName',
});

**注** テストサンドボックスが提供されていないため、Snowflake統合テストはパイプラインの一部ではありません。また、コアチームがトリアージとデバッグを行うのが困難です。このダイアレクトは、今のところSnowflakeユーザー/コミュニティによって保守される必要があります。

統合テストを実行するには

SEQ_ACCOUNT=myAccount SEQ_USER=myUser SEQ_PW=myPassword SEQ_ROLE=myRole SEQ_DB=myDatabaseName SEQ_SCHEMA=mySchema SEQ_WH=myWareHouse npm run test-integration-snowflake

Oracle Database

SequelizeがOracleで使用する基盤となるコネクタライブラリは、node-oracledbパッケージです。
サポートされているOracle Databaseとnode-oracledbのバージョンについては、リリースを参照してください。

node-oracledbを動作させるには、Oracle Instant Clientが必要です。インストールについては、node-oracledbのクイックスタートリンクを使用できます。

以下は、Oracle Databaseに関連するパラメータを持つSequelizeコンストラクタです。

const sequelize = new Sequelize('servicename', 'username', 'password', {
dialect: 'oracle',
host: 'hostname',
port: 'port number', //optional
});

Oracle Databaseのデフォルトのポート番号は1521です。

Sequelizeでは、URL形式で資格情報を渡すこともできます。

const sequelize = new Sequelize('oracle://user:pass@hostname:port/servicename');

`dialectOptions.connectString`を使用して、簡易接続文字列、ネットサービス名、または接続記述子をSequelizeコンストラクタに渡すことができます。

const sequelize = new Sequelize({
dialect: 'oracle',
username: 'user',
password: 'password',
dialectOptions: {
connectString: 'inst1',
},
});

`database`、`host`、`port`はオーバーライドされ、connectStringの値が認証に使用されることに注意してください。

接続文字列の詳細については、接続文字列を参照してください。

データ型:TIMESTAMP WITHOUT TIME ZONE - PostgreSQLのみ

PostgreSQLの`TIMESTAMP WITHOUT TIME ZONE`を操作していて、別のタイムゾーンに解析する必要がある場合は、pgライブラリ独自のパーサーを使用してください。

require('pg').types.setTypeParser(1114, stringValue => {
return new Date(stringValue + '+0000');
// e.g., UTC offset. Use any offset that you would like.
});

データ型:ARRAY(ENUM) - PostgreSQLのみ

Array(Enum)型は特別な処理が必要です。Sequelizeがデータベースと通信するたびに、ENUM名で配列値を型キャストする必要があります。

そのため、この列挙型名は`enum_<テーブル名>_<列名>`のパターンに従う必要があります。`sync`を使用している場合は、正しい名前が自動的に生成されます。

テーブルヒント - MSSQLのみ

tableHint オプションを使用して、テーブルヒントを定義できます。ヒントは TableHints の値でなければならず、絶対に必要な場合にのみ使用してください。現在、クエリごとにサポートされているテーブルヒントは1つだけです。

テーブルヒントは、特定のオプションを指定することで、MSSQL クエリ オプティマイザのデフォルトの動作をオーバーライドします。それらは、その句で参照されるテーブルまたはビューにのみ影響します。

const { TableHints } = require('sequelize');
Project.findAll({
// adding the table hint NOLOCK
tableHint: TableHints.NOLOCK,
// this will generate the SQL 'WITH (NOLOCK)'
});

インデックスヒント - MySQL/MariaDB のみ

indexHints オプションを使用して、インデックスヒントを定義できます。ヒントタイプは IndexHints の値でなければならず、値は既存のインデックスを参照する必要があります。

インデックスヒントは、MySQL クエリ オプティマイザのデフォルトの動作をオーバーライドします

const { IndexHints } = require('sequelize');
Project.findAll({
indexHints: [{ type: IndexHints.USE, values: ['index_project_on_name'] }],
where: {
id: {
[Op.gt]: 623,
},
name: {
[Op.like]: 'Foo %',
},
},
});

上記は、次のような MySQL クエリを生成します。

SELECT * FROM Project USE INDEX (index_project_on_name) WHERE name LIKE 'FOO %' AND id > 623;

Sequelize.IndexHints には、USEFORCE、および IGNORE が含まれています。

元の API 提案については、Issue #9421 を参照してください。

エンジン - MySQL/MariaDB のみ

モデルのデフォルトエンジンは InnoDB です。

engine オプションを使用して、モデルのエンジンを変更できます(例:MyISAM に変更)。

const Person = sequelize.define(
'person',
{
/* attributes */
},
{
engine: 'MYISAM',
},
);

モデル定義のすべてのオプションと同様に、この設定は Sequelize コンストラクタの define オプションを使用してグローバルに変更することもできます。

const sequelize = new Sequelize(db, user, pw, {
define: { engine: 'MYISAM' },
});

テーブルコメント - MySQL/MariaDB/PostgreSQL のみ

モデルを定義するときに、テーブルのコメントを指定できます。

class Person extends Model {}
Person.init(
{
/* attributes */
},
{
comment: "I'm a table comment!",
sequelize,
},
);

コメントは、sync() を呼び出すときに設定されます。