Home Expression Indexes and Operator Classes support for PostgreSQL

Expression Indexes and Operator Classes support for PostgreSQL

Expression Indexes

If you’re using functions in SQL queries, e.g. LOWER() or UPPER(), you need to be careful! When using a function to a select a column, existing indexes cannot be used! Create a functional index (an index on LOWER(column)).

Now this has been supported in rails for postgresql from version 7.0.4

create_table :users do |t|
  t.string :name
  t.index 'lower(name) varchar_pattern_ops'
end

Operator Classes

The operator class identifies the operators to be used by the index for that column. For example, a B-tree index on the type int4 would use the int4_ops class.

Before

The gist_trgm_ops after name is the operator class to use when using the index. Currently it’s possible to specify … USING gist (name) but there’s no way of adding the operator class after name.

After

Operator classes can be explicitly specified in add_index as:

add_index :users, :name, using: :gist, opclass: { name: :gist_trgm_ops }

In Schema CREATE INDEX users_name ON users USING gist (name gist_trgm_ops);

Share this post