Estou tendo problemas com o QuickSearch, não sei se é somente com o banco de dados PostgreSQL.
Erro ao acessar o banco de dados
ERRO: operador não existe: boolean ~~ unknown LINE 1: …cli_mes_pago_bin like ‘%dukiko%’ or cli_bloqueado like '%duk… ^ HINT: Nenhum operador corresponde com o nome e o(s) tipo(s) de argumento(s) informados. Você precisa adicionar conversões de tipo explícitas.
select count(*) from “public”.cad_clientes where cli_cnpj_cpf like ‘%dukiko%’ or cli_razao_social like ‘%dukiko%’ or cli_nome_fantasia like ‘%dukiko%’ or cli_bairro like ‘%dukiko%’ or cli_telefone_1 like ‘%dukiko%’ or cli_telefone_2 like ‘%dukiko%’ or cli_endereco like ‘%dukiko%’ or cli_complemento like ‘%dukiko%’ or cli_cep like ‘%dukiko%’ or cli_responsavel like ‘%dukiko%’ or cli_inscricao_est like ‘%dukiko%’ or cli_inscricao_mun like ‘%dukiko%’ or cli_mes_pago_bin like ‘%dukiko%’ or cli_bloqueado like ‘%dukiko%’ or cli_contrato_entregue like ‘%dukiko%’ or cli_pedido_uso_def_entregue like ‘%dukiko%’ or cli_versao_pdv_atual like ‘%dukiko%’ or cli_ramo_atividade like ‘%dukiko%’ or cli_optante_sn like ‘%dukiko%’
Gostaria de sugerir ao pessoal da NetMake para implementar no caso em que o banco de dados for PostgreSQL, utilizar a seguinte sequencia:
-
Para campos tipo boolean, colocar automaticamente no final do nome do campo ::varchar(1);
-
Para todos os campos colocar a função to_ascii(nome_campo), para poder ignorar a acentuação;
-
Ao invés de utilizar LIKE utilizar ILIKE, para ignorar maiúsculas e minúsculas.
-
Uma possível solução para o typecast ::varchar(1) para os campos boolean, seria poder alterar o pg_cast dos tipos bool para varchar para implícito ao invés de explícito. Mas não temos um comando ALTER CAST e o DROP CAST não funciona para esse tipo, pois é utilizado no sistema. E não sei se o oid é o mesmo para todos os bancos de dados, pois fazendo a alteração no pg_cast, a conversão implícita funcionou, não sendo mais necessário especificar o ::varchar(1) manualmente para a consulta funcionar. CREATE CAST (bool AS varchar) WITH FUNCTION text(bool) AS IMPLICIT;
Esse comando ficaria então dessa forma:
select
count(*)
from "public".cad_clientes
where
to_ascii(cli_cnpj_cpf) ilike '%dukiko%' or
to_ascii(cli_razao_social) ilike '%dukiko%' or
to_ascii(cli_nome_fantasia) ilike '%dukiko%' or
to_ascii(cli_bairro) ilike '%dukiko%' or
to_ascii(cli_telefone_1) ilike '%dukiko%' or
to_ascii(cli_telefone_2) ilike '%dukiko%' or
to_ascii(cli_endereco) ilike '%dukiko%' or
to_ascii(cli_complemento) ilike '%dukiko%' or
to_ascii(cli_cep) ilike '%dukiko%' or
to_ascii(cli_responsavel) ilike '%dukiko%' or
to_ascii(cli_inscricao_est) ilike '%dukiko%' or
to_ascii(cli_inscricao_mun) ilike '%dukiko%' or
to_ascii(cli_mes_pago_bin) ilike '%dukiko%' or
to_ascii(cli_bloqueado::varchar(1)) ilike '%dukiko%' or
to_ascii(cli_contrato_entregue::varchar(1)) ilike '%dukiko%' or
to_ascii(cli_pedido_uso_def_entregue::varchar(1)) ilike '%dukiko%' or
to_ascii(cli_versao_pdv_atual) ilike '%dukiko%' or
to_ascii(cli_ramo_atividade) ilike '%dukiko%' or
to_ascii(cli_optante_sn::varchar(1)) ilike '%dukiko%'