For a functional index, an index is defined
   on the result of a function applied to one or more columns of a
   single table.  Functional indexes can be used to obtain fast access
   to data based on the result of function calls.
  
   For example, a common way to do case-insensitive comparisons is to
   use the lower function:
SELECT * FROM test1 WHERE lower(col1) = 'value';
   This query can use an index, if one has been
   defined on the result of the lower(column)
   operation:
CREATE INDEX test1_lower_col1_idx ON test1 (lower(col1));
  
   The function in the index definition can take more than one
   argument, but they must be table columns, not constants.
   Functional indexes are always single-column (namely, the function
   result) even if the function uses more than one input field; there
   cannot be multicolumn indexes that contain function calls.
  
Tip:     The restrictions mentioned in the previous paragraph can easily be
    worked around by defining a custom function to use in the index
    definition that computes any desired result internally.