CREATE OPERATOR nome ( PROCEDURE = nome_da_função [, LEFTARG = tipo_à_esquerda ] [, RIGHTARG = tipo_à_direita ] [, COMMUTATOR = comutador_do_operador ] [, NEGATOR = negador_do_operador ] [, RESTRICT = função_de_seletividade_da_restrição ] [, JOIN = função_de_seletividade_da_junção ] [, HASHES ] [, MERGES ] [, SORT1 = operador_de_ordenação_à_esquerda ] [, SORT2 = operador_de_ordenação_à_direita ] [, LTCMP = operador_menor_que ] [, GTCMP = operador_maior_que ] )
O comando CREATE OPERATOR define o novo operador, nome. O usuário que define o operador se torna seu dono. Se for fornecido o nome do esquema, então o operador será criado no esquema especificado, senão será criado no esquema corrente.
O nome do operador é uma seqüência com até NAMEDATALEN-1 (63, por padrão) caracteres da seguinte lista:
+ - * / < > = ~ ! @ # % ^ & | ` ?
Existem algumas restrições na escolha do nome:~ ! @ # % ^ & | ` ?
Por exemplo, @- é um nome de operador permitido, mas *- não é. Esta restrição permite ao PostgreSQL analisar comandos em conformidade com o SQL sem requerer espaços entre os elementos (tokens).
O operador != é mapeado para <> na entrada e, portanto, estes dois nomes são sempre equivalentes.
Com relação a LEFTARG e RIGHTARG, pelo menos um dos dois deve ser definido; para operadores binários os dois devem ser definidos. Para operadores unários direito somente LEFTARG deve ser definido, enquanto que para operadores unários esquerdo somente RIGHTARG deve ser definido.
O procedimento nome_da_função deve ser previamente definido utilizando o comando CREATE FUNCTION, e deve estar definido para aceitar o número correto de argumentos (um ou dois) dos tipos indicados.
As outras cláusulas são cláusulas de otimização de operador opcionais. Seus significados estão descritos na Seção 33.11 .
Para usar um nome de operador qualificado pelo esquema em comutador_do_operador, ou nos demais argumentos opcionais, deve ser utilizada a sintaxe de OPERATOR() como, por exemplo,
COMMUTATOR = OPERATOR(meu_esquema.===) ,
Consulte a Seção 33.11 para obter mais informações.
Utilize o comando DROP OPERATOR para remover do banco de dados operadores definidos pelo usuário.
O comando abaixo define um novo operador, area-equality (igualdade de área), para o tipo de dado box:
CREATE OPERATOR === ( LEFTARG = box, RIGHTARG = box, PROCEDURE = area_equal_procedure, COMMUTATOR = ===, NEGATOR = !==, RESTRICT = area_restriction_procedure, JOIN = area_join_procedure, HASHES, SORT1 = <<<, SORT2 = <<< -- Uma vez que os operadores de classificação foram fornecidos, MERGES está envolvido. -- LTCMP e GTCMP são assumidos como sendo < e >, respectivamente );