From: | kernel <jucabapa(at)gmail(dot)com> |
---|---|
To: | Ayuda <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: Problemas de tamaño/recodificacion |
Date: | 2019-08-08 11:47:41 |
Message-ID: | de54b626-f3ab-4dd6-2519-02ae1da005eb@gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
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
From | Date | Subject | |
---|---|---|---|
Next Message | Horacio Miranda | 2019-08-08 11:56:59 | Re: Problemas de tamaño/recodificacion |
Previous Message | Horacio Miranda | 2019-08-08 10:59:02 | Re: Problemas de tamaño/recodificacion |