PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cách tạo chỉ mục trên LOWER (users.username) trong Rails (sử dụng postgres)

Có, xác thực đó sẽ thực hiện loại truy vấn đó và loại truy vấn đó sẽ thực hiện quét bảng.

Bạn thực sự có một vài vấn đề ở đây:

  • Việc xác thực phải tuân theo các điều kiện chủng tộc vì logic không có trong cơ sở dữ liệu nơi nó thuộc về. Cơ sở dữ liệu phải chịu trách nhiệm về tất cả các vấn đề về tính toàn vẹn của dữ liệu bất kể hệ tư tưởng thông thường của Rails.
  • Quá trình xác thực của bạn kích hoạt tính năng quét bảng và không ai thích quét bảng.

Bạn có thể giải quyết cả hai vấn đề đó với một chỉ mục. Vấn đề đầu tiên được giải quyết bằng cách sử dụng một chỉ mục duy nhất bên trong cơ sở dữ liệu. Vấn đề thứ hai được giải quyết bằng cách lập chỉ mục kết quả của lower(username) thay vì username .

AFAIK Rails vẫn không hiểu các chỉ mục trên các biểu thức, vì vậy bạn sẽ phải làm hai việc:

  1. Chuyển từ schema.rb thành structure.sql để giữ cho Rails không quên chỉ mục của bạn. Trong config/application.rb của bạn bạn sẽ muốn đặt:

    config.active_record.schema_format = :sql
    

    Bạn cũng sẽ phải bắt đầu sử dụng db:structure:* tác vụ rake thay vì db:schema:* các nhiệm vụ. Khi bạn đã chuyển sang structure.sql , bạn có thể xóa db/schema.rb vì nó sẽ không được cập nhật hoặc sử dụng nữa; bạn cũng sẽ muốn bắt đầu theo dõi db/structure.sql trong kiểm soát sửa đổi.

  2. Tạo chỉ mục bằng tay bằng cách viết một chút SQL trong quá trình di chuyển. Điều này thật dễ dàng:

    def up
      connection.execute(%q{
        create index idx_users_lower_username on users(lower(username))
      })
    end
    
    def down
      connection.execute(%q{
        drop index idx_users_lower_username
      })
    end
    

Tất nhiên điều này sẽ để lại cho bạn những thứ cụ thể về PostgreSQL nhưng điều đó không có gì đáng lo ngại vì dù sao thì ActiveRecord cũng không cung cấp cho bạn bất kỳ tính di động hữu ích nào.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cài đặt PostgresSQL 9.5 không thành công:“khởi tạo cụm cơ sở dữ liệu không thành công” MAC os (big sur 11.4)

  2. Cách tắt tất cả các tối ưu hóa của PostgreSQL

  3. Không tìm thấy thông thường khi chạy công cụ Diesel CLI

  4. Giá trị lỗi không tồn tại - postgresql CHÈN VÀO sự cố

  5. Lỗi khi đẩy dữ liệu sang Heroku:dịch chuyển múi giờ ra khỏi phạm vi