簡體   English   中英

schema.rb中的LOWER索引

[英]LOWER indexes in schema.rb

在我的Rails應用程序中,使用PostgreSQL數據庫,我有一個如下所示的表:

create_table "person_identifiers", force: :cascade do |t|
  t.string "identifier", limit: 255
end

我想在該列上添加索引。 我通過以下遷移執行此操作:

execute('create index person_identifiers_identifier on person_identifiers using gin (identifier gin_trgm_ops)')

這是按預期工作所以在模式中我有以下索引:

add_index "person_identifiers", ["identifier"], name: "person_identifiers_identifier", using: :gin

但我希望這個索引不區分大小寫,所以我寫道:

execute('create index person_identifiers_identifier on person_identifiers using gin (lower(identifier) gin_trgm_ops)')

但遺憾的是在schema.rb中看不到? 我知道我可以使用SQL格式而不是schema.rb,但我想堅持在schema.rb中看到這一點。

已經提出並回答了類似的問題 但是,PostgreSQL提供了一種不區分大小寫的文本數據類型,稱為citext 我在許多應用程序中使用了這種數據類型,其中字符串的大小寫是不重要的,例如用戶的電子郵件地址。 這允許該列上的查詢匹配,即使字符串是不同的情況。 它還會影響唯一性約束,因此具有相同字符序列且具有不同情況的兩個字符串現在被視為相同。

要在Rails中使用citext,您需要activerecord-postgresql-citext gem(這需要Rails版本4)。 安裝gem后,您可以使用將列遷移到citext

change_column :person_identifiers, :identifier, :citext

請記住,這是一個不區分大小寫的文本列,而不是字符串列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM