create or replace function escape_like(text)
returns text language sql immutable strict as
$q$
select regexp_replace($1, $$([\\%_])$$, $$\\\1$$, 'g')
$q$;
Попробуйте:
=> select escape_like($$foo%bar\foo__bar$$);
<i> quote_like
----------------------
foo\%bar\\foo\_\_bar
(1 row)</i>
Таким образом, ваш запрос должен выглядеть примерно так:
select * from tablename where columnname like '%' || escape_like(?) || '%';