E.4. Versión 18.1 #

E.4.1. Migración a la versión 18.1
E.4.2. Cambios

Fecha de lanzamiento: 13 de noviembre de 2025

Esta versión contiene una variedad de correcciones desde la versión 18.0. Para obtener información sobre las nuevas funciones de la versión principal 18, consulte Section E.5.

E.4.1. Migración a la versión 18.1 #

No se requiere un dump/restore para quienes tengan la versión 18.X.

E.4.2. Cambios #

  • Comprueba los privilegios de CREATE en el esquema en CREATE STATISTICS (Jelte Fennema-Nio) §

    Esta omisión permitía a los propietarios de tablas crear estadísticas en cualquier esquema, lo que potencialmente conducía a conflictos de nombres inesperados.

    El Proyecto PostgreSQL agradece a Jelte Fennema-Nio por reportar este problema. (CVE-2025-12817)

  • Evita desbordamientos de enteros en los cálculos de tamaño de asignación dentro de libpq (Jacob Champion) §

    Varios lugares en libpq no eran lo suficientemente cuidadosos al calcular el tamaño requerido para una asignación de memoria. Entradas lo suficientemente grandes podían causar un desbordamiento de enteros, dando como resultado un búfer de tamaño inferior al necesario, lo que luego conducía a escribir más allá del final del búfer.

    El Proyecto PostgreSQL agradece a Aleksey Solovev of Positive Technologies por reportar este problema. (CVE-2025-12818)

  • Evita errores de tipo unrecognized node type cuando una función SQL/JSON como JSON_VALUE tiene una cláusula DEFAULT que contiene una expresión COLLATE (Jian He) § §

  • Evita la optimización incorrecta de cláusulas HAVING sin variables con grouping sets (Richard Guo) § §

  • No utiliza paralelismo en hash right semi joins (Richard Guo) §

    Este caso no funciona de manera confiable debido a una condición de carrera al actualizar la tabla hash compartida del join.

  • Evita una posible división por cero al crear planes ordered-append (Richard Guo) §

    Este error podía resultar en la selección incorrecta de la ruta más barata, o en un fallo de aserción en compilaciones de depuración (debug).

  • Corrige un fallo del planificador con tipos de índice que pueden realizar acceso ordenado pero no index-only scans (Maxime Schoemans) §

    Esta omisión resultaba en errores como no data returned for index-only scan. El caso no se presenta con ningún tipo de índice incorporado (in-core), pero algunas extensiones experimentaron el problema.

  • Elimina una aserción defectuosa en la limpieza de índices btree (Peter Geoghegan) §

  • Evita posibles fallos por falta de memoria (out-of-memory) o errores de tipo invalid memory alloc request size durante la construcción paralela de índices GIN (Tomas Vondra) §

  • Garantiza que la autorresumición (autosummarization) de BRIN proporcione un snapshot para las expresiones de índice que lo necesiten (Álvaro Herrera) § §

    Anteriormente, la autorresumición fallaba para tales índices, y luego dejaba tuplas de índice de marcador de posición (placeholders) atrás, lo que provocaba que el índice se inflara (bloat) con el tiempo.

  • Corrige un riesgo de desbordamiento de enteros en escaneos de índices BRIN cuando la tabla contiene cerca de 232 páginas (Sunil S) §

    Esta omisión podía resultar en un bucle infinito o en el escaneo de páginas de la tabla innecesarias.

  • Corrige la extensión de ceros (zero-extension) incorrecta de valores almacenados en el código de deformación de tuplas generado por JIT (David Rowley) §

    Cuando no se utiliza JIT, el código equivalente realiza una extensión de signo (sign-extension) en lugar de una extensión de ceros, lo que conduce a una representación Datum diferente de los tipos de datos enteros pequeños. Esta inconsistencia se enmascaraba en la mayoría de los casos, pero se sabe que conduce a errores del tipo could not find memoization table entry al utilizar nodos de plan Memoize, y podría haber otros síntomas.

  • Corrige una caída (crash) poco común al procesar consultas hash de GROUPING SETS (David Rowley) §

  • Repara la lógica defectuosa para elegir el tamaño de las tablas hash en hash joins (Tomas Vondra) §

    Los hash joins a veces utilizaban más memoria de la prevista, o no lograban dividirla de manera eficiente.

  • Mejora la lógica de búsqueda de relaciones en las funciones de manipulación de estadísticas (Nathan Bossart) § §

    Corrige pg_restore_relation_stats(), pg_clear_relation_stats(), pg_restore_attribute_stats() y pg_clear_attribute_stats() para comprobar los privilegios antes de adquirir el bloqueo en la relación destino en lugar de después.

  • Corrige la lógica incorrecta para almacenar en caché la información de la relación resultado para disparadores (David Rowley, Amit Langote) §

    En los casi de que los conjuntos de columnas de las particiones no son físicamente idénticos a los conjuntos de columnas de sus tablas particionadas padre, esta omisión podía conducir a caídas (crashes).

  • Corrige una caída (crash) durante las recomprobaciones de EvalPlanQual en tablas particionadas (David Rowley, Amit Langote) §

  • Corrige el manejo por parte de EvalPlanQual de joins extranjeros o personalizados que no tienen un plan de join local alternativo preparado para EPQ (Masahiko Sawada, Etsuro Fujita) §

    En tales casos, el método de acceso extranjero o personalizado debería ser invocado normalmente, pero eso no sucedía, lo que típicamente conducía a una caída.

  • Evita duplicar las restricciones de partición hash durante un DETACH CONCURRENTLY (Haiyang Li) §

    ALTER TABLE DETACH PARTITION CONCURRENTLY fue escrito para añadir una copia de la restricción de partición a la partición ahora desasociada (detached). Esto estaba mal encaminado, en parte porque un DETACH no concurrente no hace eso, pero principalmente porque en el caso de particionamiento hash la expresión de restricción contiene referencias al OID de la tabla padre. Eso causa problemas durante el dump/restore, o si la tabla padre se elimina después de DETACH. En la versión 19 y posteriores, ya no crearemos tales restricciones copiadas en absoluto. En las ramas liberadas, para minimizar el riesgo de consecuencias imprevistas, solo omitimos añadir una restricción copiada si es para particionamiento hash.

  • Desautoriza columnas generadas en claves de partición (Jian He, Ashutosh Bapat) §

    Esto ya no estaba permitido, pero la comprobación omitía algunos casos, como aquellos en los que la referencia a la columna es implícita en una referencia a toda la fila (whole-row).

  • Desautoriza columnas generadas en cláusulas COPY ... FROM ... WHERE (Peter Eisentraut, Jian He) §

    Anteriormente, intentar hacer referencia a tal columna resultaba en un comportamiento incorrecto o en un mensaje de error oscuro, ya que las columnas generadas aún no se han calculado en el punto donde se realiza el filtrado WHERE.

  • Evita establecer una columna como identidad (identity) si tiene una restricción not-null pero la restricción está marcada como inválida (Jian He) §

    Las columnas de identidad deben ser not-null, pero la comprobación de eso omitía este caso límite.

  • Evita un posible uso de memoria después de liberar (use-after-free) en vacuum paralelo (Kevin Oommen Anish) §

    Este error no parece tener consecuencias en las compilaciones estándar, pero es teóricamente un peligro.

  • Corrige la comprobación de visibilidad para objetos de estadísticas en pg_temp (Noah Misch) §

    Un objeto de estadísticas ubicado en un esquema temporal no puede ser nombrado sin calificación de esquema, pero pg_statistics_obj_is_visible() omitía ese detalle y podía devolver true de todos modos. A su vez, funciones como pg_describe_object() podían fallar al calificar el esquema del nombre del objeto como se esperaba.

  • Corrige una fuga de memoria menor durante la reproducción (replay) de WAL de creación de bases de datos (Nathan Bossart) §

  • Corrige el reporte incorrecto del retraso de replicación (replication lag) en la vista pg_stat_replication (Fujii Masao) §

    Si el LSN de reproducción (replay) de cualquier servidor standby dejaba de avanzar, las columnas write_lag y flush_lag eventualmente dejaban de actualizarse.

  • Evita mensajes de registro (log) duplicados sobre configuraciones de primary_slot_name inválidas (Fujii Masao) §

  • Evita fallos cuando synchronized_standby_slots hace referencia a slots de replicación inexistentes (Shlok Kyal) §

  • Elimina el archivo de estado de slot incompleto después de fallar al escribir el estado de un slot de replicación en el disco (Michael Paquier) §

    Anteriormente, un fallo como la falta de espacio en disco provocaba que quedara atrás un archivo temporal state.tmp. Eso es problemático porque bloquearía todos los intentos posteriores de escribir el estado, requiriendo intervención manual para limpiarlo.

  • Corrige el manejo incorrecto de las señales de lock timeout en los parallel apply workers para la replicación lógica (Hayato Kuroda) §

    Se estaba utilizando el mismo número de señal tanto para el apagado (shutdown) del worker como para el lock timeout, lo que conducía a confusión.

  • Evita el apagado no deseado del receptor WAL (WAL receiver) al cambiar de origen de WAL de streaming a archivo (Xuneng Zhou) §

    Durante un cambio de timeline, el receptor WAL de un servidor standby debería permanecer activo, esperando un nuevo punto de inicio de streaming de WAL. En su lugar, se apagaba repetidamente y se reiniciaba de inmediato, lo que podía confundir al código de monitoreo de estado.

  • Corrige un problema de uso de memoria después de liberar (use-after-free) en el caché de sincronización de relaciones mantenido por el plugin de decodificación lógica pgoutput (Vignesh C, Masahiko Sawada) §

    Un error durante la decodificación lógica podía resultar en caídas (crashes) en los intentos posteriores de decodificación lógica en la misma sesión. El caso solo se presenta cuando pgoutput es invocado a través de funciones SQL.

  • Evita la invalidación innecesaria de slots de replicación lógica (Bertrand Drouvot) §

  • Reestablece el caso especial para la colación C en la configuración regional (locale) (Jeff Davis) §

    Esto corrige una regresión en el acceso a catálogos compartidos al principio de la inicialización del backend, antes de haber seleccionado una base de datos. No se sabe si es un problema para algún código del núcleo (core) de PostgreSQL, pero algunas extensiones se vieron afectadas.

  • Corrige la impresión incorrecta de mensajes sobre fallos al comprobar si el usuario tiene privilegios de administrador de Windows (Bryan Green) §

    Este código habría colapsado o al menos impreso basura. Sin embargo, no se han reportado tales casos, indicando que el fallo de estas llamadas al sistema es extremadamente raro.

  • Evita caídas (crashes) al intentar probar PostgreSQL con ciertas opciones de libsanitizer (Emmanuel Sibi, Jacob Champion) §

  • Fix false memory-context-checking warnings in debug builds en Windows de 64 bits (David Rowley) §

  • Maneja correctamente GROUP BY DISTINCT en sentencias de asignación de PL/pgSQL (Tom Lane) §

    El analizador no lograba registrar la opción DISTINCT en este contexto, por lo que el comando actuaba como si fuera un GROUP BY normal.

  • Evita fugas de memoria al manejar un error SQL dentro de PL/Python (Tom Lane) §

    Esto corrige una fuga de memoria con tiempo de vida de la sesión introducida en nuestras versiones menores anteriores.

  • Corrige el manejo por parte de libpq de errores relacionados con sockets en Windows dentro de su lógica GSSAPI (Ning Wu, Tom Lane) §

    El código para cifrar/descifrar datos transmitidos utilizando GSSAPI no reconocía correctamente las condiciones de error en el socket de conexión, dado que Windows reporta esos errores de manera diferente a otras plataformas. Esto conducía al fallo al establecer tales conexiones en Windows.

  • Corrige el respaldo (dumping) de restricciones not-null no heredadas en columnas de tablas heredadas (Dilip Kumar) §

    pg_dump no lograba preservar tales restricciones al respaldar desde un servidor anterior a la versión 18.

  • Corrige el ordenamiento de restricciones de clave foránea (foreign key) por parte de pg_dump (Álvaro Herrera) §

    Garantiza un orden consistente de estos objetos de la base de datos, como ya se hacía para otros tipos de objetos.

  • Corrige varios errores en la lógica de compresión de datos en pg_dump y pg_restore (Daniel Gustafsson, Tom Lane) § § §

    La comprobación de errores faltaba o era incorrecta en varios lugares, y también había problemas de portabilidad que se manifestaban en hardware big-endian. Estos problemas se habían pasado por alto porque este código solo se utiliza para leer archivos TOC comprimidos dentro de respaldos con formato de directorio. pg_dump nunca produce tal tipo de respaldo; el caso solo se puede alcanzar comprimiendo manualmente el archivo TOC después del respaldo, lo cual es una acción soportada pero muy poco común.

  • Corrige pgbench para que falle limpiamente si se inicia una operación COPY (Anthonin Bonnefoy) §

    pgbench no tiene la intención de soportar este caso, pero anteriormente entraba en un bucle infinito.

  • Corrige el reporte de múltiples errores en pgbench (Yugo Nagata) §

    En los casos en que dos llamadas sucesivas a PQgetResult fallan, pgbench podía reportar el mensaje de error incorrecto.

  • En pgbench, corrige la aserción defectuosa sobre errores en modo pipeline (Yugo Nagata) §

  • Corrige la fuga de memoria por archivo en pg_combinebackup (Tom Lane) §

  • Garantiza que las funciones de contrib/pg_buffercache puedan cancelarse (Satyanarayana Narlapuram, Yuhang Qiu) § §

    Algunas rutas de código eran capaces de ejecutarse durante mucho tiempo sin comprobar si había interrupciones.

  • Corrige las comprobaciones de privilegios de contrib/pg_prewarm para índices (Ayush Vatsa, Nathan Bossart) § §

    pg_prewarm() requiere el privilegio SELECT en las relaciones que se van a precalentar (prewarm). Sin embargo, dado que los índices no tienen privilegios SQL propios, esto provocaba que los usuarios no superusuarios no pudieran precalentar índices. En su lugar, comprueba el privilegio SELECT en la tabla del índice.

  • En contrib/pg_stat_statements, evita una caída (crash) cuando dos o más constantes se marcan con la misma ubicación en el texto de la sentencia SQL (Sami Imseih, Dmitry Dolgov) §

  • Hace que contrib/pgstattuple sea más robusto frente a páginas de índice vacías o inválidas (Nitin Motiani) §

    Cuenta las páginas llenas de ceros como espacio libre, e ignora las páginas que son inválidas según una comprobación del tamaño del espacio especial de la página. El código para los índices btree ya contaba las páginas llenas de ceros como libres, pero el código de hash y gist lanzaba un error, lo que se ha comprobado que es mucho menos amigable para el usuario. De manera similar, hace que los tres casos coincidan en ignorar las páginas corrompidas en lugar de lanzar errores.

  • Refuerza nuestras macros de barreras de lectura y escritura para satisfacer a Clang (Thomas Munro) §

    Suponíamos que __atomic_thread_fence() es una barrera suficiente para evitar que el compilador de C reordene los accesos a la memoria a su alrededor, pero parece que no es así para Clang, lo que le permite generar código incorrecto para máquinas RISC-V, MIPS y LoongArch al menos. Añade barreras explícitas del compilador para solucionar esto.

  • Corrige la infraestructura de construcción PGXS para soportar la compilación de archivos NLS po para extensiones (Ryo Matsumura) §