Mat*_*ski 5 ruby sql postgresql ruby-on-rails
在我的Rails应用程序中,使用PostgreSQL数据库,我有一个如下所示的表:
create_table "person_identifiers", force: :cascade do |t|
t.string "identifier", limit: 255
end
Run Code Online (Sandbox Code Playgroud)
我想在该列上添加索引.我通过以下迁移执行此操作:
execute('create index person_identifiers_identifier on person_identifiers using gin (identifier gin_trgm_ops)')
Run Code Online (Sandbox Code Playgroud)
这是按预期工作所以在模式中我有以下索引:
add_index "person_identifiers", ["identifier"], name: "person_identifiers_identifier", using: :gin
Run Code Online (Sandbox Code Playgroud)
但我希望这个索引不区分大小写,所以我写道:
execute('create index person_identifiers_identifier on person_identifiers using gin (lower(identifier) gin_trgm_ops)')
Run Code Online (Sandbox Code Playgroud)
但遗憾的是在schema.rb中看不到?我知道我可以使用SQL格式而不是schema.rb,但我想坚持在schema.rb中看到这一点.
小智 1
类似的问题已经被提出并得到回答。但是,PostgreSQL 提供了一种不区分大小写的文本数据类型,称为citext。我在许多字符串大小写不重要的应用程序中使用过这种数据类型,例如用户的电子邮件地址。这允许对该列的查询进行匹配,即使字符串的大小写不同。它还会影响唯一性约束,因此具有相同字符序列但大小写不同的两个字符串现在被视为相同。
要在 Rails 中使用 citext,您将需要activerecord-postgresql-citext gem(这需要 Rails 版本 4)。安装 gem 后,您可以使用以下命令将该列迁移到 citext
change_column :person_identifiers, :identifier, :citext
请记住,这是一个不区分大小写的文本列,而不是字符串列。
| 归档时间: |
|
| 查看次数: |
275 次 |
| 最近记录: |