8.6. Classes de operador

A definição de um índice pode especificar uma classe de operador para cada coluna do índice.

CREATE INDEX nome ON tabela (coluna opclass [, ...]);

A classe de operador identifica os operadores a ser utilizados pelo índice para esta coluna. Por exemplo, um índice B-tree em inteiros de quatro bytes utiliza a classe int4_ops; esta classe de operador inclui funções de comparação para inteiros de quatro bytes. Na prática a classe de operador padrão para o tipo de dado da coluna é normalmente suficiente. O ponto principal de existir classe de operador é que, para alguns tipos de dado, pode haver mais de uma ordenação que faça sentido. Por exemplo, pode ser desejado ordenar o tipo de dado do número complexo tanto pelo valor absoluto quanto pela parte real. Isto pode ser feito definindo duas classes de operador para o tipo de dado e, então, selecionando a classe apropriada ao definir o índice. Existem, também, algumas classes de operador com finalidades especiais:

A seguinte consulta exibe todas as classes de operador definidas:

SELECT am.amname AS acc_method,
       opc.opcname AS ops_name
    FROM pg_am am, pg_opclass opc
    WHERE opc.opcamid = am.oid
    ORDER BY acc_method, ops_name;
    

Podendo ser estendida para mostrar todos os operadores incluídos em cada classe:

SELECT am.amname AS acc_method,
       opc.opcname AS ops_name,
       opr.oprname AS ops_comp
    FROM pg_am am, pg_opclass opc, pg_amop amop, pg_operator opr
    WHERE opc.opcamid = am.oid AND
          amop.amopclaid = opc.oid AND
          amop.amopopr = opr.oid
    ORDER BY acc_method, ops_name, ops_comp;