Waiting for 8.4 – final post (?)

For quite some time I've been posting about new features in 8.4. First post was over a year ago, on 16th of February 2008.

Now, we just (yesterday) got nice surprise: beta is here:

(depesz@[LOCAL]:5840) 12:39:15 [depesz]
# SELECT version();
 PostgreSQL 8.4beta1 ON i686-pc-linux-gnu, compiled BY GCC gcc (GCC) 4.2.4 (Ubuntu 4.2.4-1ubuntu3), 32-bit
(1 ROW)

Since I don't expect any new features in beta and release candidate stages, let me put some short summary.

First and foremost – remember that I didn't write about everything that's new in 8.4. It was always subjective choice what should be written about, and what can be skipped.

There have been a lot of commits that were bugfixes, performance improvements, or simply features that, while very useful, are too “deep in core" that they're not really visible to end user (in my not so humble opinion).

So, let's list the things that I wrote about in the last year (regarding 8.4):

[2008-02-16] waiting for pg 8.4
possibility to use subselects in limit clause, and “as" becomes optional in “select field as whatever"
[2008-03-10] waiting for pg 8.4
several config (guc) parameters are now based on enum
[2008-03-22] waiting for pg 8.4
report of all queries involved in deadlock situation
[2008-03-24] waiting for pg 8.4
quote_nullable function to properly quote null value
[2008-03-28] waiting for 8.4
triggers on TRUNCATE
[2008-03-31] waiting for 8.4
psql additions: foreign key info, extension of info in \l(+) and fix for tab completion in cross-schema queries
[2008-04-02] waiting for 8.4
EXECUTE ‘…' USING var, var2; in pl/PgSQL.
[2008-04-05] waiting for 8.4 – current_query()
current_query() function
[2008-04-18] Waiting for 8.4 – “EXPLAIN VERBOSE"
explain verbose output has been made more useful for users
[2008-04-29] Waiting for 8.4 – generate_subscripts
function to generate list of array index values
[2008-05-02] Waiting for 8.4 – \o and \d+ in psql
\d* functions in psql got extended, and \o made more strict
[2008-05-03] Waiting for 8.4 – RETURN QUERY EXECUTE and cursor_tuple_fraction
RETURN QUERY EXECUTE ‘select …' in psql, and new config variable to hint planner about your expected cursor usage
[2008-05-05] Waiting for 8.4 – pg_conf_load_time, time-related generate_series and enum values in \dT+
a way to check when was last pg_ctl reload, generate_series function that works using timestamptz and extended \dT output in psql
[2008-05-09] Waiting for 8.4 – psql vs. tabs + wrapped output
proper way to display tab character in psql, and a better way to display long lines/records
[2008-05-14] Waiting for 8.4 – pl/PgSQL RAISE
greatly extended RAISE in pl/PgSQL
[2008-05-15] Waiting for 8.4 – function stats
a way to track functions usage and used time
[2008-05-16] Waiting for 8.4 – CASE in pl/PgSQL
CASE statement in pl/PgSQL
[2008-05-17] Waiting for 8.4 – partial-match support in GIN, and sequence restart
simple way to restart sequence number, and change to gin indexes that allows prefix searches
[2008-06-11] Waiting for 8.4 – timing on/off
Ability to turn timing (in psql) on or off regardless of its current state
[2008-07-30] Waiting for 8.4 – sequence details
extended \d
[2008-07-30] Waiting for 8.4 – storage types for table columns

shows storage type of columns
[2008-07-31] Waiting for 8.4 – variadic functions
support for functions with variable number of arguments
[2008-08-04] Waiting for 8.4 – RETURNS TABLE
RETURNS TABLE syntax sugar for defining functions
[2008-08-05] Waiting for 8.4 – hash based DISTINCT
DISTINCT that uses hash aggregate instead of sorting.
[2008-08-10] Waiting for 8.4 – UNION / INTERSECT / EXCEPT
set operators (UNION/INTERSECT/EXCEPT) can now use hash operations
[2008-08-10] Waiting for 8.4 – case insensitive text ( citext )
case insensitive text type added as contrib module
[2008-09-06] Waiting for 8.4 – \ef in psql
\ef operation for psql (edit function)
[2008-09-08] Waiting for 8.4 – ordered data loading in pg_dump
change in way data is dumped by pg_dump to prevent failures in some cases
[2008-09-13] Waiting for 8.4 – pgbench with timed execution
pgbench got ability to run for given time
[2008-09-28] Waiting for 8.4 – database-level lc_collation and lc_ctype
databases can now have various collations/ctypes.
[2008-10-04] Waiting for 8.4 – new FSM (Free Space Map)
new free space map, that doesn't need configuration
[2008-10-07] Waiting for 8.4 – Common Table Expressions (WITH queries)
[2008-11-03] Waiting for 8.4 – pl/* srf functions in selects
ability to select function(); where function returns many rows, and is in some pl/*, and not in “sql".
[2008-11-03] Waiting for 8.4 – sql-wrappable RETURNING
RETURNING can now be wrapped in sql functions.
[2008-11-05] Waiting for 8.4 – suppress_redundant_updates_trigger
trigger to prevent actual update if the update wouldn't modify any columns
[2008-11-14] Waiting for 8.4 – array aggregate and array unpacker
function to help dealing with arrays – aggregate and unnesting
[2008-11-23] Waiting for 8.4 – auto-explain
automaticaly explains (to log) long queries
[2008-11-23] Waiting for 8.4 – TABLE
TABLE command in sql
[2008-12-08] Waiting for 8.4 – Visibility maps
visibility maps – a way to greatly decrease vacuum time
[2008-12-09] Waiting for 8.4 – Default values for function arguments + integer in any base
ability to provide default values for functions
[2009-01-08] Waiting for 8.4 – remove system objects from \dX
make \d* commands in psql not list system objects
[2009-01-13] Waiting for 8.4 – pg_stat_statements
automatic statistics of queries ran by pg.
[2009-01-21] Waiting for 8.4 – window functions
well, window functions 🙂
[2009-01-31] Waiting for 8.4 – column level privileges.
ability to grant/revoke privileges on separate columns in tables
[2009-02-09] Waiting for 8.4 – parallel restoration of dumps
a way to speedup dump restore by using multiple parallel workers
[2009-03-22] Waiting for 8.4 – no more -d in pg_dump!
the much-hated -d option to pg_dump is no more with us

As a final note – my predictions for near future.

I checked previous releases to get some data about how fast can be expect 8.4 to be released.

This is what I found (time in development is counted from release of previous major version to “beta1"):

version in development in beta in rc
7.4 8.5 months 3 months 2 weeks
8.0 8.5 months 4 months 6 weeks
8.1 7.25 months 2.25 months 1 week
8.2 10.5 months 2 months 1.5 week
8.3 10 months 3 months 1 month

8.4 was in development for 14.25 months! Given this I estimate that the beta can take up to 4 months, and I would expect RC to take up to 2 months.

This makes me estimate that final release of 8.4 will be around September/October (but I hope it will be earlier).