Cerdamente hablando se pueden cambiar los valores y recompilar el
Postgresql.
Pero eso no creo que sea muy sano a menos que tengas una gran maquina....
Ahora por que los XML las guardas ahi ? no es mejor tener un modelo
relacional ?
On 8/08/2019 11:47 PM, kernel wrote:
El 08/08/2019 a las 12:59, Horacio Miranda escribió:
On 8/08/2019 9:49 PM, kernel wrote:
El 08/08/2019 a las 10:35, Horacio Miranda escribió:
Debes indicar un poco mas de informacion, parametros, version de la
base, si estas usando XML parsers... la consulta que estas
haciendo cuando se cae, etc...
Lee el correo y revisa que estes entregando toda la informacion que
alguien de soporte te pueda preguntar.
On 8/08/2019 8:21 PM, kernel wrote:
Hola,
Tengo una funcion plpgsql que me devuelve un valor xml de 0,5 GB,
La codificacion que tiene la DB es UTF-8, como el cliente que
utilizo es latin9, creo que a la hora del intercambio al hacer el
cambio de encoding me da el problema
¿alguna idea?
Gracias
ERROR: memoria agotada
La cadena de 516574025 bytes es demasiado larga para la
recodificación
Gracias Horacio,
Tengo un postgresql version 10.5 sobre opensuse
La consulta es bastante larga, es una SELECT a base de XMLELEMENT
, XMLAGG y XMLATTRIBUTES , nada mas
El problema se produce cuando la funcion retorna el valor xml ;
cuando sacamos muchos datos y el encoding del cliente es distinto
del que tiene la base de datos.
Si la cantidad de datos es grande y no tiene que cambiar el
encoding, no hay problema, tampoco lo hay si reducimos el volumen
de datos y tenemos distinto encoding
Supongo que tengo que tocar algo de memoria de postgres pero no se
que parametro tocar y si es asi , ¿se puede hacer dinamicamente ?
Un Saludo
Revisando los codigos veo que el postgresql tiene un limite en el
mbutils
https://doxygen.postgresql.org/mbutils_8c.html
if ((Size
<https://doxygen.postgresql.org/c_8h.html#af9ecec2d692138fab9167164a457cbd4>)
len >= (MaxAllocSize
<https://doxygen.postgresql.org/memutils_8h.html#a74a92b981e9b6aa591c5fbb24efd1dac>
/ (Size
<https://doxygen.postgresql.org/c_8h.html#af9ecec2d692138fab9167164a457cbd4>)
MAX_CONVERSION_GROWTH
<https://doxygen.postgresql.org/pg__wchar_8h.html#a1a226786d77d0e2baecaafd3d5aafd10>))
https://doxygen.postgresql.org/mbutils_8c.html
#define MaxAllocSize ((Size
<https://doxygen.postgresql.org/c_8h.html#af9ecec2d692138fab9167164a457cbd4>)
0x3fffffff) /* 1 gigabyte - 1 */
#define MAX_CONVERSION_GROWTH 4
Es decir que el tamaño maximo del objeto puede ser basicamante 256M
menos 1/4 de byte.
El mensaje de error dice que tu objeto es de 492.64M que es mayor al
limite.
Lo que se me ocurre es que vas a tener que usar un split para no
tener un XML más grande de 256M.
Ignoro lo que guardas como XML, pero si son fotos tal ves sea mejor
guardar esos caracteres grandes como un CLOB ?
Si, eso debe de ser.
El error esta en el server, si ejecutas con pgadmin y le pones antes
de la llamada un set client_encoding = 'latin9' antes de la llamada a
la funcion da el error, vas a los log del servidor y ahi esta.
Lo que guardo es texto, es un xml , tiene unas 2400 facturas, con
todos los campos posibles de impresión.
Gracias, voy haber que se me ocurre