<listitem>
<para>
- Disallow functional or attribute string data type casts for
+ Disallow function-style and attribute-style data type casts for
composite types (Tom Lane)
</para>
<listitem>
<para>
- Support <literal>RIGHT</> and <literal>FULL OUTER JOIN</> in
- hash joins (Tom Lane)
+ Allow <literal>FULL OUTER JOIN</literal> to be implemented as a
+ hash join, and allow either side of a <literal>LEFT OUTER JOIN</>
+ or <literal>RIGHT OUTER JOIN</> to be hashed (Tom Lane)
</para>
<para>
- Previously hash joins could not be considered for outer joins;
- this provides additional query optimization possibilities.
- **What about <literal>LEFT</> joins?
+ Previously <literal>FULL OUTER JOIN</literal> could only be
+ implemented as a merge join, and <literal>LEFT OUTER JOIN</literal>
+ and <literal>RIGHT OUTER JOIN</literal> could has only the nullable
+ side of the join. These changes provide additional query optimization
+ possibilities.
</para>
</listitem>
</para>
</listitem>
+ <listitem>
+ <para>
+ Reduce the memory requirement for large ispell dictionaries
+ (Pavel Stehule, Tom Lane)
+ </para>
+ </listitem>
+
</itemizedlist>
</sect4>
<listitem>
<para>
- Add a <link
- linkend="guc-synchronous-replication"><varname>synchronous_replication</></link>
- option (Simon Riggs, Fujii Masao)
+ Allow synchronous replication (Simon Riggs, Fujii Masao)
</para>
<para>
- This allows the primary to wait for the standby to receive
- transaction information before acknowledging the commit.
+ One standby at a time can take the role of the synchronous standby,
+ as controlled by the
+ <link linkend="guc-synchronous-standby-names"><varname>synchronous_standby_names</varname></link>
+ setting. Synchronous replication can be enabled or disabled on a
+ per-transaction basis using the
+ <link linkend="guc-synchronous-replication"><varname>synchronous_replication</></link>
+ setting. This allows the primary to wait for a standby to write the
+ transaction information to disk before acknowledging the commit.
</para>
</listitem>
<para>
Add variable <link
linkend="guc-hot-standby-feedback"><varname>hot_standby_feedback</></link>
- to enable standbys to communicate their needed snapshots to
- the primary (Simon Riggs)
+ to enable standbys to postpone cleanup of old row versions on the
+ primary (Simon Riggs)
</para>
<para>
<para>
These named restore points can be specified as recovery
- targets in <filename>recovery.conf</>.
+ targets using the new <filename>recovery.conf</> setting
+ <link linkend="recovery-target-name"><varname>recovery_target_name</></link>
</para>
</listitem>
clauses to be fed into <command>INSERT</>, <command>UPDATE</>,
<command>DELETE </> statements (Marko Tiikkaja, Hitoshi Harada)
</para>
-
- <para>
- Specifically, let <command>SELECT</> query results be fed
- into <command>INSERT</>, <command>UPDATE</>, <command>DELETE</>
- statements.
- </para>
</listitem>
<listitem>
<para>
Some other database system already allowed this behavior, and
- because of the primary key, the result is unambiguous..
+ because of the primary key, the result is unambiguous.
</para>
</listitem>
</para>
</listitem>
+ <listitem>
+ <para>
+ Fix ordinary queries with rules to use the same snapshot behavior
+ as <command>EXPLAIN ANALYZE</> (Marko Tiikkaja)
+ </para>
+
+ <para>
+ Previously <command>EXPLAIN ANALYZE</> used a slightly different
+ snapshot for queries involving rules. The <command>EXPLAIN ANALYZE</>
+ behavior was judged to be more logical.
+ </para>
+ </listitem>
+
</itemizedlist>
<sect4>
Add support for more object types in <command>ALTER ... SET
SCHEMA</> commands (Dimitri Fontaine)
</para>
+
+ <para>
+ This command is now supported for conversions, operators, operator
+ classes, operator families, text search configurations, and text search
+ dictionaries, text search parsers, and text search templates.
+ </para>
</listitem>
</itemizedlist>
<listitem>
<para>
Add <link linkend="SQL-ALTERTABLE"><command>ALTER TABLE ...
- ADD UNIQUE</></link>/<literal>PRIMARY KEY USING INDEX</>
+ ADD UNIQUE/PRIMARY KEY USING INDEX</command></link>
(Gurjeet Singh)
</para>
<para>
- This allows existing unique indexes to be used as primary
- keys, including indexes that were created concurrently.
+ This allows a primary key or unique constraint to be added using an
+ existing unique index, including a concurrently created unique index.
</para>
</listitem>
<listitem>
<para>
- Allow <link linkend="SQL-ALTERTABLE"><command>ALTER TABLE</></link>
- ... <literal>SET DATA TYPE</> to avoid table rewrites in
+ Allow <link linkend="SQL-ALTERTABLE"><command>ALTER TABLE
+ ... SET DATA TYPE</command></link> to avoid table rewrites in
appropriate cases (Noah Misch, Robert Haas)
</para>
<para>
For example, converting a varchar column to text no longer
- requires a rewrite of the table. **Length changes require
- rewrite?
+ requires a rewrite of the table. However, increasing the length
+ constraint on a varchar column still requires a table rewrite.
</para>
</listitem>
<listitem>
<para>
- Add a true <link linkend="xact-serializable"><literal>serializable</>
- </link> isolation level (Kevin Grittner, Dan Ports)
+ Add a true <link linkend="xact-serializable"><literal>serializable</></link> isolation level (Kevin Grittner, Dan Ports)
</para>
<para>
- Previously asking for serializable isolation produced
- snapshot isolation, which had certain documented anomalies.
+ Previously asking for serializable isolation guaranteed only that
+ a single MVCC snapshot would be used for the entire transaction, which
+ allowed certain documented anomalies.
The old snapshot isolation level is still accessible by
requesting the <link linkend="xact-repeatable-read"><literal>REPEATABLE
READ</></link> isolation level.
</para>
</listitem>
- <listitem>
- <para>
- Fix <command>EXPLAIN ANALYZE</>
- with rules to use the same snapshot behavior as ordinary
- queries (Marko Tiikkaja)
- </para>
-
- <para>
- Previously <command>EXPLAIN ANALYZE</> used a slightly different
- snapshot for queries involving rules.
- </para>
- </listitem>
-
</itemizedlist>
</sect4>
</sect4>
+ <sect4>
+ <title><link linkend="SQL-CLUSTER"><command>CLUSTER</></link></title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Allow CLUSTER to sort the table rather than scanning the index
+ when it seems likely to be cheaper (Leonardo Francalanci)
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect4>
+
<sect4>
<title>Indexes</title>
</para>
</listitem>
+ <listitem>
+ <para>
+ Allow <link linkend="GIN"><acronym>GIN</> indexes</link> to
+ better recognize duplicate search entries (Tom Lane)
+ </para>
+
+ <para>
+ This reduces the cost of index scans, especially in cases where
+ it avoids unnecessary full index scans.
+ </para>
+ </listitem>
+
<listitem>
<para>
Fix <link linkend="GiST"><acronym>GiST</> indexes</link> to be fully
</para>
</listitem>
+ <listitem>
+ <para>
+ Allow binary I/O on type <type>void</type> (Radoslaw Smogura)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Improve hypotenuse calculations for geometric operators (Paul Matthews)
+ </para>
+
+ <para>
+ This avoids unnecessary overflows, and may also be more accurate.
+ </para>
+ </listitem>
+
</itemizedlist>
<sect4>
</para>
<para>
- **Needs description.
+ This is analogous to the existing facility that allows casting a row
+ type to a supertable's row type.
</para>
</listitem>
</para>
<para>
- This is used for xpath matching.
+ These are used for xpath matching.
</para>
</listitem>
<para>
These check whether the input is properly-formed <acronym>XML</>.
+ They supersede functionality that was previously available only using
+ <filename>contrib/xml2</filename>.
</para>
</listitem>
</para>
<para>
- **Why were these added?
+ These improve compatibility with other database products.
</para>
</listitem>
</para>
<para>
- This function is used to obtain comments on objects. **Alvaro,
- why is this useful for pg_depend?
+ This function is used to obtain comments on objects.
</para>
</listitem>
<sect3>
<title>Server-Side Languages</title>
- <itemizedlist>
+ <sect4>
+ <title><link linkend="plpgsql">PL/pgSQL</link> Server-Side Language</title>
- <listitem>
- <para>
- Add <link linkend="plpgsql-foreach-array"><command>FOREACH IN
- ARRAY</></link> to <link linkend="plpgsql">PL/pgSQL</link> to
- allow array iteration (Pavel Stehule)
- </para>
+ <itemizedlist>
- <para>
- This is more efficient than previous methods.
- </para>
- </listitem>
+ <listitem>
+ <para>
+ Add <link linkend="plpgsql-foreach-array"><command>FOREACH IN
+ ARRAY</></link> to <link linkend="plpgsql">PL/pgSQL</link> to
+ allow array iteration (Pavel Stehule)
+ </para>
+
+ <para>
+ This is more efficient than previous methods.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add <link linkend="plpgsql-foreach-array"><command>FOREACH IN
+ ARRAY</></link> to <link linkend="plpgsql">PL/pgSQL</link> to
+ allow array iteration (Pavel Stehule)
+ </para>
+
+ <para>
+ This is more efficient than previous methods.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Allow <command>RAISE</command> without parameters to be caught in
+ the same places that could catch a <command>RAISE ERROR</command>
+ from the same location.
+ </para>
+
+ <para>
+ The new behavior is more consistent.
+ </para>
+ </listitem>
</itemizedlist>
+ </sect4>
+
<sect4>
<title><link linkend="plperl">PL/Perl</link> Server-Side Language</title>
</para>
</listitem>
+ <listitem>
+ <para>
+ <function>plpy.Fatal</function> now raises <literal>FATAL</>, rather
+ than <literal>ERROR</literal> (Jan Urbanski)
+ </para>
+
+ <para>
+ The old behavior was incorrect.
+ </para>
+ </listitem>
+
<listitem>
<para>
Overhaul of PL/Python (Jan Urbanski)
</para>
</listitem>
+ <listitem>
+ <para>
+ Make <application>psql</application> distinguish between unique
+ indices and unique constraints (Josh Kupershmidt)
+ </para>
+ </listitem>
+
<listitem>
<para>
Additional tab completion of <application>psql</> variables (Pavel
</sect4>
+ <sect4>
+ <title><link linkend="ecpg"><application>ECPG</></link></title>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ Allow ecpg to accept dynamic cursor names even in
+ <literal>WHERE CURRENT OF</literal> clauses
+ </para>
+ </listitem>
+
+ </itemizedlist>
+ </sect4>
+
</sect3>
<sect3>
<listitem>
<para>
- Add <link linkend="extension">extensions</link> which allow
- packaged additions to <productname>PostgreSQL</> (Dimitri
+ Add <link linkend="extension">extensions</link> which simplify
+ packaging of additions to <productname>PostgreSQL</> (Dimitri
Fontaine, Tom Lane)
</para>
<listitem>
<para>
Add <link linkend="file-fdw"><filename>contrib/file_fdw</></link>
- foreign-data wrapper for reading files via <command>COPY
- </>(Shigeru Hanada)
+ foreign-data wrapper (Shigeru Hanada)
</para>
<para>
- This adds foreign table support for flat-file.
+ Foreign tables using this foreign data wrapper will read flat files
+ in a matter very similar to <command>COPY</>.
</para>
</listitem>
</para>
</listitem>
+ <listitem>
+ <para>
+ Allow <link linkend="intarray"><filename>contrib/intarray</></link>
+ to work properly on multi-dimensional arrays (Tom Lane)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ In
+ <link linkend="intarray"><filename>contrib/intarray</></link>,
+ avoid errors complaining about the presence nulls in cases where no
+ nulls are actually present (Tom Lane)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ In
+ <link linkend="intarray"><filename>contrib/intarray</></link>,
+ fix behavior of containment operators with respect to empty arrays
+ (Tom Lane)
+ </para>
+
+ <para>
+ Empty arrays are now correctly considered to be contained in any other
+ array.
+ </para>
+ </listitem>
+
<listitem>
<para>
In <link linkend="xml2"><filename>contrib/xml2</></link>, remove
</para>
</listitem>
+ <listitem>
+ <para>
+ In <link linkend="pageinspect"><filename>contrib/pageinspect</></link>,
+ fix heap_page_item to return infomasks as 32-bit values (Alvaro Herrera)
+ </para>
+
+ <para>
+ This avoids returning negative values, which was confusing. The
+ underlying value is a 16-bit unsigned integer.
+ </para>
+ </listitem>
+
</itemizedlist>
<sect4>