Db.models.Person.findAll(where: {firstName: {$iLike: '%name%'}});
長所:覚えやすい。 No Sequelize関数ラッパー - ビルトイン演算子なので、構文はそれほど役に立ちません。特殊な索引やデータベースの変更は必要ありません。
短所:スロー、あなたがpg_trgm
3のような拡張子をいじり始める場合を除きます。
select * from people where name = 'DAVID'
:暗黙的に(代わりにtext
またはcharacter varying
の)「citext」これを回すのと同じ実用的な効果を持っているとして、あなたの列の型を定義小文字 を比較citextタイプ、を使用してテキスト列を定義します。これに
...
select * from people where LOWER(name) = LOWER('DAVID')
PostgreSQLのdocumen tationがcitextタイプを使用してテーブルを作成する方法の一例として、これを示しています
CREATE TABLE users (
nick CITEXT PRIMARY KEY,
pass TEXT NOT NULL
);
INSERT INTO users VALUES ('larry', md5(random()::text));
INSERT INTO users VALUES ('Tom', md5(random()::text));
INSERT INTO users VALUES ('Damian', md5(random()::text));
INSERT INTO users VALUES ('NEAL', md5(random()::text));
INSERT INTO users VALUES ('Bjørn', md5(random()::text));
SELECT * FROM users WHERE nick = 'Larry';
TL; DRは基本的に「citext」のために、あなたの「テキスト」列を入れ替えます。
citextモジュールにはPostgreSQL 8.4が付属しているため、拡張機能をインストールする必要はありません。しかし、あなたは、次のSQLでそれを使用する各データベース上でそれを有効にする必要があります:次に
// Assuming `Conn` is a new Sequelize instance
const Person = Conn.define('person', {
firstName: {
allowNull: false,
type: 'citext' // <-- this is the only change
}
});
検索を反対:あなたのSequelize定義で
CREATE EXTENSION IF NOT EXISTS citext WITH SCHEMA public;
そして、type
属性を定義しますクエリをラップする必要はありません:その列は常に大文字と小文字を区別しない正規のwhere =
と
専門家に照会されます醜いsequelize.fn
呼び出しで。明示的に小文字を覚える必要はありません。ロケールを認識するので、すべてのキャラクタセットで機能します。
短所:最初にテーブルを定義する際にSequelize定義で使用することを覚えておく必要があります。常にアクティブにする - テーブルを定義する際に、大文字と小文字を区別しない検索を行う必要があることを知る必要があります。
あなたには当てはまりませんが、私の場合はC#linqでunaccent関数を使ってみました。最後には新しい列 'u_column'を作成し、それを埋めるためにpostgres関数を使います。 Wasnt preattyしかし仕事。 –