## E.186. Release 8.4.1

Release date: 2009-09-09

This release contains a variety of fixes from 8.4. For information about new features in the 8.4 major release, see Section E.187.

### E.186.1. Migration to Version 8.4.1

A dump/restore is not required for those running 8.4.X.

### E.186.2. Changes

- Fix WAL page header initialization at the end of archive recovery (Heikki)

  This could lead to failure to process the WAL in a subsequent archive recovery.

- Fix “cannot make new WAL entries during recovery” error (Tom)

- Fix problem that could make expired rows visible after a crash (Tom)

  This bug involved a page status bit potentially not being set correctly after a server crash.

- Disallow `RESET ROLE` and `RESET SESSION AUTHORIZATION` inside security-definer functions (Tom, Heikki)

  This covers a case that was missed in the previous patch that disallowed `SET ROLE` and `SET SESSION AUTHORIZATION` inside security-definer functions. (See CVE-2007-6600)

- Make `LOAD` of an already-loaded loadable module into a no-op (Tom)

  Formerly, `LOAD` would attempt to unload and re-load the module, but this is unsafe and not all that useful.

- Make window function `PARTITION BY` and `ORDER BY` items always be interpreted as simple expressions (Tom)

  In 8.4.0 these lists were parsed following the rules used for top-level `GROUP BY` and `ORDER BY` lists. But this was not correct per the SQL standard, and it led to possible circularity.

- Fix several errors in planning of semi-joins (Tom)

  These led to wrong query results in some cases where `IN` or `EXISTS` was used together with another join.

- Fix handling of whole-row references to subqueries that are within an outer join (Tom)

  An example is `SELECT COUNT(ss.*) FROM ... LEFT JOIN (SELECT ...) ss ON ...`. Here, `ss.*` would be treated as `ROW(NULL,NULL,...)` for null-extended join rows, which is not the same as a simple NULL. Now it is treated as a simple NULL.

- Fix Windows shared-memory allocation code (Tsutomu Yamada, Magnus)

  This bug led to the often-reported “could not reattach to shared memory” error message.

- Fix locale handling with plperl (Heikki)

  This bug could cause the server's locale setting to change when a plperl function is called, leading to data corruption.

- Fix handling of reloptions to ensure setting one option doesn't force default values for others (Itagaki Takahiro)

- Ensure that a “fast shutdown” request will forcibly terminate open sessions, even if a “smart shutdown” was already in progress (Fujii Masao)

- Avoid memory leak for `array_agg()` in `GROUP BY` queries (Tom)

- Treat `to_char(..., 'TH')` as an uppercase ordinal suffix with `'HH'`/`'HH12'` (Heikki)

  It was previously handled as `'th'` (lowercase).

- Include the fractional part in the result of `EXTRACT(second)` and `EXTRACT(milliseconds)` for `time` and `time with time zone` inputs (Tom)

  This has always worked for floating-point datetime configurations, but was broken in the integer datetime code.

- Fix overflow for `INTERVAL '`x` ms'` when `x` is more than 2 million and integer datetimes are in use (Alex Hunsaker)

- Improve performance when processing toasted values in index scans (Tom)

  This is particularly useful for PostGIS.

- Fix a typo that disabled `commit_delay` (Jeff Janes)

- Output early-startup messages to `postmaster.log` if the server is started in silent mode (Tom)

  Previously such error messages were discarded, leading to difficulty in debugging.

- Remove translated FAQs (Peter)

  They are now on the wiki. The main FAQ was moved to the wiki some time ago.

- Fix pg_ctl to not go into an infinite loop if `postgresql.conf` is empty (Jeff Davis)

- Fix several errors in pg_dump's `--binary-upgrade` mode (Bruce, Tom)

  `pg_dump --binary-upgrade` is used by pg_migrator.

- Fix `contrib/xml2`'s `xslt_process()` to properly handle the maximum number of parameters (twenty) (Tom)

- Improve robustness of libpq's code to recover from errors during `COPY FROM STDIN` (Tom)

- Avoid including conflicting readline and editline header files when both libraries are installed (Zdenek Kotala)

- Work around gcc bug that causes “floating-point exception” instead of “division by zero” on some platforms (Tom)

- Update time zone data files to tzdata release 2009l for DST law changes in Bangladesh, Egypt, Mauritius.