我无法使用Sails.js V1.0 + Waterline ORM从数据库中获取不区分大小写的搜索。我正在使用sails-postgresql适配器。运行环境是Heroku + Heroku PostgreSQL。
是否有任何方法可以关闭数据库适配器中的以下设置 - 出于性能原因,包含的区分大小写取决于数据库适配器。
试过这个方法:
数据存储配置是:
default: {
adapter: 'sails-postgresql',
url: 'postgres://....',
ssl: true,
wlNext: {
caseSensitive: true
}
}
代码块是:
var meetings = await Meeting.find({
select: ['id', 'uid', 'name', 'deleted', 'complete'],
where: {
owner: user.id,
name: { contains: searchJson.name } : ""
},
skip: (inputs.page > 0) ? (inputs.page) : 0,
limit: (inputs.limit > 0) ? (inputs.limit) : 10,
sort: 'date DESC'
});
我发现使用PG / Sails处理这个和不区分大小写的唯一索引的最简单方法是使用citext列类型而不是text
/ character varying
类型(相比之下,强制所有内容都是小写的臭味)。
citext
是一种不区分大小写的文本数据类型。 “从本质上讲,它在比较值时内部调用较低。否则,它的行为几乎与文本完全相同。”
从工作应用程序中提取的示例模型属性:
username: {
type: 'string',
columnType: 'citext',
required: true,
unique: true,
description: 'A users.. Username',
// ...
},
根据this (somewhat irellevant) Heroku docs page,这看起来应该可行,但您可能需要先在数据库上运行create extension citext;
。