Alvaro Herrera escribió:
> En términos de código, esa limitación de tamaño de conversión podría
> eliminarse ahora que Postgres tiene código reciente para manejar trozos
> de memoria grandes.
Como en el parche adjunto (que no sé si compila)
--
Álvaro Herrera https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
diff --git a/src/backend/utils/mb/mbutils.c b/src/backend/utils/mb/mbutils.c
index bec54bb5cb..d0d92541e2 100644
--- a/src/backend/utils/mb/mbutils.c
+++ b/src/backend/utils/mb/mbutils.c
@@ -348,17 +348,8 @@ pg_do_encoding_conversion(unsigned char *src, int len,
pg_encoding_to_char(src_encoding),
pg_encoding_to_char(dest_encoding))));
- /*
- * Allocate space for conversion result, being wary of integer overflow
- */
- if ((Size) len >= (MaxAllocSize / (Size) MAX_CONVERSION_GROWTH))
- ereport(ERROR,
- (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
- errmsg("out of memory"),
- errdetail("String of %d bytes is too long for encoding conversion.",
- len)));
-
- result = palloc(len * MAX_CONVERSION_GROWTH + 1);
+ result = palloc_extended((Size) len * MAX_CONVERSION_GROWTH + 1,
+ MCXT_ALLOC_HUGE);
OidFunctionCall5(proc,
Int32GetDatum(src_encoding),