QuickSearch e PostgreSQL

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%'

Boa noite,

Reportei este problema para nossa equipe de bugs.

att,
Bernhard Bernsmann

Este problema ainda existe na versao 8.1 ao inves de utilizar de like utilizar ilike.

Usou conexão PDO? tente com ela.