CREATE OPERATOR CLASS nome [ DEFAULT ] FOR TYPE tipo_de_dado USING método_de_índice AS { OPERATOR número_da_estratégia nome_do_operador [ ( tipo_do_operador, tipo_do_operador ) ] [ RECHECK ] | FUNCTION número_de_suporte nome_da_função ( tipo_do_argumento [, ...] ) | STORAGE tipo_armazenado } [, ... ]
O comando CREATE OPERATOR CLASS cria uma classe de operadores. Uma classe de operadores define como um determinado tipo de dado pode ser usado em um índice. A classe de operadores especifica que certos operadores vão desempenhar determinados papéis, ou "estratégias", para este tipo de dado e este método de índice. A classe de operadores também especifica os procedimentos de suporte a serem usados pelo método do índice quando a classe de operadores for selecionada para uma coluna do índice. Todos os operadores e funções usados por uma classe de operadores deverão estar definidos antes da classe de operadores ser criada.
Se for fornecido o nome do esquema então a classe de operadores será criada no esquema especificado, senão será criada no esquema corrente. Duas classes de operadores no mesmo esquema podem ter o mesmo nome somente se forem para métodos de índice diferentes.
O usuário que cria a classe de operadores se torna seu dono. Atualmente o usuário criador deve ser um superusuário; esta restrição é feita porque uma definição de classe de operadores errada pode confundir, ou mesmo derrubar, o servidor.
Atualmente o comando CREATE OPERATOR CLASS não verifica se a definição da classe de operadores inclui todos os operadores e funções requeridos pelo método de índice, nem se os operadores e funções formam um conjunto autoconsistente. É responsabilidade do usuário definir uma classe de operadores válida.
Para obter mais informações consulte a Seção 33.14.
O nome da classe de operadores a ser criada. O nome pode ser qualificado pelo esquema.
Se estiver presente, a classe de operadores se tornará a classe de operadores padrão para seu tipo de dado. No máximo uma classe de operadores pode ser a classe padrão para um determinado tipo de dado e método de índice.
O tipo de dado de coluna que esta classe de operadores se destina.
O nome do método de índice que esta classe de operadores se destina.
O número da estratégia do método de índice para o operador associado com a classe de operadores.
O nome (opcionalmente qualificado pelo esquema) do operador associado com a classe de operadores.
Os tipos de dado dos operandos do operador, ou NONE indicando um operador unário-esquerdo ou unário-direito. Os tipos de dado dos operandos podem ser omitidos no caso normal, onde são os mesmos do tipo de dado da classe de operadores.
Se estiver presente, o índice para este operador será lossy [1] (com perdas) e, portanto, as linhas trazidas usando o índice devem ser verificadas outra vez para ver se realmente satisfazem a cláusula de qualificação envolvendo este operador.
O número do procedimento de suporte do método de índice para a função associada com a classe de operadores.
O nome (opcionalmente qualificado pelo esquema) da função que é o procedimento de suporte do método de índice para a classe de operadores.
Os tipos de dado dos parâmetros da função.
O tipo de dado realmente armazenado no índice. Geralmente é o mesmo tipo de dado da coluna, mas alguns métodos de índice (GIN e GIST no momento) permitem que seja diferente. A cláusula STORAGE deve ser omitida, a menos que o método de índice permita o uso de um tipo diferente.
As cláusulas OPERATOR, FUNCTION e STORAGE podem ser escritas em qualquer ordem.
Como o mecanismo de índice não verifica as permissões de acesso para as funções antes de usá-las, a inclusão de uma função ou operador em uma classe de operadores é equivalente a conceder permissão de execução para todos. Isto normalmente não é um problema, devido ao tipo de função que é útil para uma classe de operadores.
Os operadores não devem ser definidos através de funções SQL. É possível que a função SQL seja incorporada ( inlined [2] ) ao comando que faz a chamada, impedindo que o otimizador reconheça que o comando corresponde a um índice.
O exemplo mostrado a seguir define uma classe de operadores de índice GiST para o tipo de dado _int4 (matriz de int4). Para ver o exemplo completo deve ser consultado contrib/intarray/.
CREATE OPERATOR CLASS gist__int_ops DEFAULT FOR TYPE _int4 USING gist AS OPERATOR 3 &&, OPERATOR 6 = RECHECK, OPERATOR 7 @>, OPERATOR 8 <@, OPERATOR 20 @@ (_int4, query_int), FUNCTION 1 g_int_consistent (internal, _int4, int4), FUNCTION 2 g_int_union (bytea, internal), FUNCTION 3 g_int_compress (internal), FUNCTION 4 g_int_decompress (internal), FUNCTION 5 g_int_penalty (internal, internal, internal), FUNCTION 6 g_int_picksplit (internal, internal), FUNCTION 7 g_int_same (_int4, _int4, internal);
O comando CREATE OPERATOR CLASS é uma extensão do PostgreSQL. Não existe o comando CREATE OPERATOR CLASS no padrão SQL.
[1] |
lossy — Termo que descreve um algoritmo de compressão que na verdade reduz a quantidade de informações nos dados, em vez de reduzir apenas o número de bits usados para representar esta informação. A informação perdida normalmente é removida porque é subjetivamente menos importante à qualidade dos dados (geralmente uma imagem ou som), ou porque pode ser recuperada razoavelmente por interpolação dos dados remanescentes. MPEG e JPEG são exemplos de técnicas de compressão com perdas. FOLDOC - Free On-Line Dictionary of Computing (N. do T.) |
[2] |
inline — Substituir a chamada à função por uma instância do corpo da função. FOLDOC - Free On-Line Dictionary of Computing (N. do T.) |