In previous releases, IN/NOT IN subqueries were joined to the
upper query by sequentially scanning the subquery looking for
a join. The 7.4 code uses the same sophisticated techniques
- used by ordinary joins and so is much faster, and is now faster
- than EXISTS subqueries.
+ used by ordinary joins and so is much faster. An IN
+ will now usually as fast as or faster than an equivalent EXISTS
+ subquery; this reverses the conventional wisdom that applied to
+ previous releases.
Improved GROUP BY processing by using hash buckets
- In previous releases, GROUP BY totals were accumulated by
- sequentially scanning the list of groups looking for a match;
- the 7.4 code places GROUP BY values in hash buckets so the
- proper match can be found much quicker. This is particularly
- significant in speeding up queries that have a large
- number of distinct GROUP BY values.
+ In previous releases, GROUP BY values were accumulated and sorted
+ to obtain group-by counts; the 7.4 code places GROUP BY values in
+ hash buckets so sorting is not required, or reverts to the old
+ behavior if the group-by buckets will not fit in memory.
specified by the query; 7.4 allows full optimization of
queries using ANSI join syntax, meaning the optimizer considers
all possible join orderings and chooses the most efficient.
+ Outer joins, however, must still follow the declared ordering.
Full support for IPv6 connections and IPv6 address
data types
- Prior releases allowed only IPv6 connections and IP data types only
+ Prior releases allowed only IPv4 connections and IP data types only
supported IPv4 addresses. This release adds full IPv6 support in
both of these areas.
-
New protocol improves connection speed/reliability,
-and adds error codes, status information, a binary protocol, error
-reporting verbosity, and cleaner startup packets.
+
New client-to-server protocol adds error codes, more status
+information, better support for binary data transmission, parameter
+values separated from SQL commands, prepared statements available at the
+protocol level, clean recovery from COPY failures, and cleaner startup
+packets. The older protocol is still supported by both servers and
+clients.
+
Allow cursors to exist outside transactions,
systems.
+
Syntax errors now reported as 'syntax error' rather than 'parse error' (Tom)
Server Operation Changes
Align shared buffers on 32-byte boundary for copy speed improvement (Manfred Spraul)
- Certain CPU's perform faster data copies when addresses are 32-bit
+ Certain CPU's perform faster data copies when addresses are 32-byte
aligned.
strings.
-
Fix subquery aggregates of upper query columns to match SQL spec. (Tom)
+
Fix aggregates in subqueries to match SQL spec (Tom)
- bjm
+ The SQL spec says that an aggregate function appearing within a nested
+ subquery belongs to the outer query if its argument contains only
+ outer-query variables. Prior PG releases did not handle this fine point
+ correctly.
Add option to prevent auto-addition of tables referenced in query (Nigel J.
Andrews)
By default, tables mentioned in the query are automatically added
- to the FROM clause if they are not already there. This option
- disabled that behavior.
+ to the FROM clause if they are not already there. This is compatible with
+ historic Postgres behavior but is contrary to the SQL spec.
+ This option allows selecting spec-compatible behavior.
Allow UPDATE ... SET col = DEFAULT (Rod)
the transaction aborts.
-
Multiple pggla_dump fixes, including tar format and large objects
+
Multiple pg_dump fixes, including tar format and large objects
Allow pg_dump to dump specific schemas (Neil)
Allow pg_dump to preserve column storage characteristics (Christopher)