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:
As duas classes de operador box_ops e bigbox_ops suportam índices R-tree no tipo de dado box. A diferença entre estas duas é que bigbox_ops reduz as coordenadas da caixa, para evitar excessões de ponto flutuante ao realizar multiplicação, adição e subtração de coordenadas muito grandes de ponto flutuante. Se o campo no qual os retângulos se encontram tiver aproximadamente 20 000 unidades quadradas ou mais, deve ser utilizado bigbox_ops.
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;