Estou tentando escapar de um caractere '%' dentro de uma função format() no PostgreSQL. A função substitui os valores das colunas com base em uma lista de colunas, excluindo retornos (\n) e aparando as strings.
CREATE OR REPLACE FUNCTION eliminar_retornos(text) RETURNS VOID
AS $$
declare
i text;
fields text[] := ARRAY['direccion', 'localidad', 'calle', 'esq1', 'esq2', 'obs'];
BEGIN
FOREACH i IN ARRAY fields
loop
EXECUTE format(
'update %1$s set %2$s = trim(upper(replace(%2$s, E''\n'', '' '')))', $1, i)
;
END LOOP;
RAISE NOTICE 'Se actualizó la capa %', $1;
END
;
$$ LANGUAGE plpgsql;
Eu quero mudar essa função para substituir apenas aquelas strings que tem retornos, usando algo como;
'update %1$s set %2$s = trim(upper(replace(%2$s, E''\n'', '' ''))) where %2$s LIKE E''%\n%''', $1, i)
O problema é que não sei como escapar corretamente o '%' para o 'LIKE' dentro da função format().
Desculpe por postar algo não reproduzível, meu conhecimento é limitado para conseguir isso.
O manual diz claramente: