ダイアレクト固有事項
基盤となるコネクタライブラリ
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`には、以下のフィールドを渡すことができます。
- `mode`:SQLite接続の開始モードを設定します。可能な値は`sqlite3`パッケージによって提供され、`SQLite.OPEN_READONLY`、`SQLite.OPEN_READWRITE`、または`SQLite.OPEN_CREATE`を含めることができます。
詳細については、sqlite3のAPIリファレンスとSQLite Cインターフェースドキュメントを参照してください。
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
には、USE
、FORCE
、および 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()
を呼び出すときに設定されます。