Cita: si en la cadena a buscar la persona ingresa mas de un apostrofe (') como haría para quitarlos a todos o colocarle el caracter de escape
Eso lo deberías controlar en el ingreso de los datos, en la aplicación, y no en la base de datos. ¿no te parece?
Por otro lado, según el manual de referencia de PostgreSQL, esa forma de usarlo es correcta, pero como mencionas que usas PHP, cabe preguntarse si el problema no lo está provocando el propio PHP.
Debes tener en cuenta que dentro del PHP, el escape tiene impacto cuando manipulas cadenas de texto, de modo que en realidad puede estar produciendose una doble ejecución del escape.
¿A qué me refiero?
Simplemente a que si esa sintaxis la estás creando en una cadena de texto dentro del PHP, el PHP ya está absorbiendo el uso del escapado, y por tanto deja de existir el caracter al momento de enviarlo a Posgre.
En otras palabras, deberías verificar cómo queda la query
antes de enviarla a la base. Muy probablemente en lugar de estar así:
Código SQL:
Ver originalOR UPPER(d.docbib_titulo) LIKE UPPER('%\'%')
si la imprimes en pantalla, aparezca así:
Código SQL:
Ver originalOR UPPER(d.docbib_titulo) LIKE UPPER('%'%')
Si eso es lo que está sucediendo, la solución es simple: Hay que escapar el escape. Uno para que lo consuma PHP, y otro para Posgre.
Código SQL:
Ver originalOR UPPER(d.docbib_titulo) LIKE UPPER('%\\'%')