## E.206. Release 8.3.5

Release date: 2008-11-03

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

### E.206.1. Migration to Version 8.3.5

A dump/restore is not required for those running 8.3.X. However, if you are upgrading from a version earlier than 8.3.1, see Section E.210. Also, if you were running a previous 8.3.X release, it is recommended to `REINDEX` all GiST indexes after the upgrade.

### E.206.2. Changes

- Fix GiST index corruption due to marking the wrong index entry “dead” after a deletion (Teodor)

  This would result in index searches failing to find rows they should have found. Corrupted indexes can be fixed with `REINDEX`.

- Fix backend crash when the client encoding cannot represent a localized error message (Tom)

  We have addressed similar issues before, but it would still fail if the “character has no equivalent” message itself couldn't be converted. The fix is to disable localization and send the plain ASCII error message when we detect such a situation.

- Fix possible crash in `bytea`-to-XML mapping (Michael McMaster)

- Fix possible crash when deeply nested functions are invoked from a trigger (Tom)

- Improve optimization of `expression` `IN` (`expression-list`) queries (Tom, per an idea from Robert Haas)

  Cases in which there are query variables on the right-hand side had been handled less efficiently in 8.2.x and 8.3.x than in prior versions. The fix restores 8.1 behavior for such cases.

- Fix mis-expansion of rule queries when a sub-`SELECT` appears in a function call in `FROM`, a multi-row `VALUES` list, or a `RETURNING` list (Tom)

  The usual symptom of this problem is an “unrecognized node type” error.

- Fix Assert failure during rescan of an `IS NULL` search of a GiST index (Teodor)

- Fix memory leak during rescan of a hashed aggregation plan (Neil)

- Ensure an error is reported when a newly-defined PL/pgSQL trigger function is invoked as a normal function (Tom)

- Force a checkpoint before `CREATE DATABASE` starts to copy files (Heikki)

  This prevents a possible failure if files had recently been deleted in the source database.

- Prevent possible collision of `relfilenode` numbers when moving a table to another tablespace with `ALTER SET TABLESPACE` (Heikki)

  The command tried to re-use the existing filename, instead of picking one that is known unused in the destination directory.

- Fix incorrect text search headline generation when single query item matches first word of text (Sushant Sinha)

- Fix improper display of fractional seconds in interval values when using a non-ISO datestyle in an `--enable-integer-datetimes` build (Ron Mayer)

- Make `ILIKE` compare characters case-insensitively even when they're escaped (Andrew)

- Ensure `DISCARD` is handled properly by statement logging (Tom)

- Fix incorrect logging of last-completed-transaction time during PITR recovery (Tom)

- Ensure `SPI_getvalue` and `SPI_getbinval` behave correctly when the passed tuple and tuple descriptor have different numbers of columns (Tom)

  This situation is normal when a table has had columns added or removed, but these two functions didn't handle it properly. The only likely consequence is an incorrect error indication.

- Mark `SessionReplicationRole` as `PGDLLIMPORT` so it can be used by Slony on Windows (Magnus)

- Fix small memory leak when using libpq's `gsslib` parameter (Magnus)

  The space used by the parameter string was not freed at connection close.

- Ensure libgssapi is linked into libpq if needed (Markus Schaaf)

- Fix ecpg's parsing of `CREATE ROLE` (Michael)

- Fix recent breakage of `pg_ctl restart` (Tom)

- Ensure `pg_control` is opened in binary mode (Itagaki Takahiro)

  pg_controldata and pg_resetxlog did this incorrectly, and so could fail on Windows.

- Update time zone data files to tzdata release 2008i (for DST law changes in Argentina, Brazil, Mauritius, Syria)