## E.204. Release 9.0.14

Release date: 2013-10-10

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

### E.204.1. Migration to Version 9.0.14

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

However, if you are upgrading from a version earlier than 9.0.13, see Section E.205.

### E.204.2. Changes

- Prevent corruption of multi-byte characters when attempting to case-fold identifiers (Andrew Dunstan)

  PostgreSQL case-folds non-ASCII characters only when using a single-byte server encoding.

- Fix checkpoint memory leak in background writer when `wal_level = hot_standby` (Naoya Anzai)

- Fix memory leak caused by `lo_open()` failure (Heikki Linnakangas)

- Fix memory overcommit bug when `work_mem` is using more than 24GB of memory (Stephen Frost)

- Fix deadlock bug in libpq when using SSL (Stephen Frost)

- Fix possible SSL state corruption in threaded libpq applications (Nick Phillips, Stephen Frost)

- Properly compute row estimates for boolean columns containing many NULL values (Andrew Gierth)

  Previously tests like `col IS NOT TRUE` and `col IS NOT FALSE` did not properly factor in NULL values when estimating plan costs.

- Prevent pushing down `WHERE` clauses into unsafe `UNION/INTERSECT` subqueries (Tom Lane)

  Subqueries of a `UNION` or `INTERSECT` that contain set-returning functions or volatile functions in their `SELECT` lists could be improperly optimized, leading to run-time errors or incorrect query results.

- Fix rare case of “failed to locate grouping columns” planner failure (Tom Lane)

- Improve view dumping code's handling of dropped columns in referenced tables (Tom Lane)

- Properly record index comments created using `UNIQUE` and `PRIMARY KEY` syntax (Andres Freund)

  This fixes a parallel pg_restore failure.

- Fix `REINDEX TABLE` and `REINDEX DATABASE` to properly revalidate constraints and mark invalidated indexes as valid (Noah Misch)

  `REINDEX INDEX` has always worked properly.

- Fix possible deadlock during concurrent `CREATE INDEX CONCURRENTLY` operations (Tom Lane)

- Fix `regexp_matches()` handling of zero-length matches (Jeevan Chalke)

  Previously, zero-length matches like '^' could return too many matches.

- Fix crash for overly-complex regular expressions (Heikki Linnakangas)

- Fix regular expression match failures for back references combined with non-greedy quantifiers (Jeevan Chalke)

- Prevent `CREATE FUNCTION` from checking `SET` variables unless function body checking is enabled (Tom Lane)

- Allow `ALTER DEFAULT PRIVILEGES` to operate on schemas without requiring CREATE permission (Tom Lane)

- Loosen restriction on keywords used in queries (Tom Lane)

  Specifically, lessen keyword restrictions for role names, language names, `EXPLAIN` and `COPY` options, and `SET` values. This allows `COPY ... (FORMAT BINARY)` to work as expected; previously `BINARY` needed to be quoted.

- Fix `pgp_pub_decrypt()` so it works for secret keys with passwords (Marko Kreen)

- Remove rare inaccurate warning during vacuum of index-less tables (Heikki Linnakangas)

- Ensure that `VACUUM ANALYZE` still runs the ANALYZE phase if its attempt to truncate the file is cancelled due to lock conflicts (Kevin Grittner)

- Avoid possible failure when performing transaction control commands (e.g ROLLBACK) in prepared queries (Tom Lane)

- Ensure that floating-point data input accepts standard spellings of “infinity” on all platforms (Tom Lane)

  The C99 standard says that allowable spellings are `inf`, `+inf`, `-inf`, `infinity`, `+infinity`, and `-infinity`. Make sure we recognize these even if the platform's `strtod` function doesn't.

- Expand ability to compare rows to records and arrays (Rafal Rzepecki, Tom Lane)

- Update time zone data files to tzdata release 2013d for DST law changes in Israel, Morocco, Palestine, and Paraguay. Also, historical zone data corrections for Macquarie Island.