<!-- doc/src/sgml/release-9.1.sgml -->
-<!-- This is up-to-date with commits through 2010-12-28 -->
+<!-- This is (hopefully) up-to-date with commits through 2011-03-05 -->
<sect1 id="release-9-1-alpha">
- <title>Release 9.1alpha3</title>
+ <title>Release 9.1alpha4</title>
<sect2>
<title>Overview</title>
<para>
Allow WITH clauses to be attached to INSERT, UPDATE, DELETE
statements
</para>
+ </listitem>
+ <listitem>
<para>
- This is not the hoped-for facility of using
- INSERT/UPDATE/DELETE inside a WITH, but rather the other way
- around.
+ <emphasis>Allow INSERT/UPDATE/DELETE to be used inside a WITH
+ clause</emphasis>
</para>
</listitem>
</para>
</listitem>
+ <listitem>
+ <para>
+ <emphasis>Allow a table's row type to be cast to the table's supertype
+ if it's a type table.</emphasis>
+ </para>
+ <para>
+ This is analagous to the existing facility that allows casting a row
+ type to a supertable's row type.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>Make foreign data wrappers functional, and support FOREIGN
+ TABLEs.</emphasis>
+ </para>
+ <para>
+ Foreign tables are component of SQL/MED, and provide a framework to
+ allow data stored outside the database to be accessed via SQL.
+ contrib/file_fdw is provided as a sample foreign data wrapper.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>Allow a unique or primary key constraint to be created
+ using an existing index.</emphasis>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>Implement a truly serializable isolation level</emphasis>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>Allow foreign key constraints to be added as initially
+ NOT VALID, and validated later</emphasis>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>Allow multiple collations to be used within a single
+ database</emphasis>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>Support extensions, which provide a cleaner method for
+ installing and upgrading add-on modules, such as those in contrib
+ </emphasis>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>Teach ALTER TABLE .. SET DATA TYPE to avoid a table write
+ in some cases where it isn't necessary
+ </emphasis>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>Add ENCODING option to COPY TO/FROM</emphasis>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>Allow binary I/O of type "void"</emphasis>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>Rearrange snapshot handlling to make rule expansion more
+ consistent</emphasis>
+ </para>
+ <para>
+ Portals, SQL functions, and SPI all now agree that a completely new
+ MVCC snapshot should be obtained only after fully executing each
+ original query. This is equivalent to the prior behavior of EXPLAIN
+ ANALYZE. It eliminates one source of concurrency hazards for
+ rules, and should also be marginally faster.
+ </para>
+ </listitem>
+
</itemizedlist>
</sect3>
<sect3>
This can be used to optimize nearest-neighbor searches.
</para>
</listitem>
+
<listitem>
<para>
Improve process shutdown speed
</para>
</listitem>
+ <listitem>
+ <para>
+ <emphasis>Support unlogged tables.</emphasis>
+ </para>
+ <para>
+ The contents of an unlogged table are not WAL-logged; thus, they
+ are replicated and are truncated whenever the database system enters
+ recovery. Indexes on unlogged tables are also unlogged, but GIST
+ indexes on unlogged tables are not currently supported.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>Hash joins now support right and full outer joins.</emphasis>
+ </para>
+ <para>
+ Previously, full joins could be implemented only as a merge join,
+ and left and right outer joins could only hash the table on the
+ nullable side of the join. This optimization is particularly
+ advantageous when the non-nullable side of a left or right outer
+ join is much smaller than the nullable side.
+ </para>
+ </listitem>
+
<listitem>
<para>
Reduce the memory requirement for large ispell dictionaries
</para>
</listitem>
+ <listitem>
+ <para>
+ <emphasis>Fix GIN to support null keys, empty and null items, and
+ full index scans</emphasis>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>Teach GIN to combine duplicate keys even across different
+ quals</emphasis>
+ </para>
+ </listitem>
+
<listitem>
<para>
Performance improvements in pg_upgrade for uses with many tables
</para>
</listitem>
+ <listitem>
+ <para>
+ <emphasis>Avoid unnecessary detoast when comparing unequal-length text
+ or bytea values for equality or inequality</emphasis>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>Try to compact the background writer's fsync queue when
+ it overflows, instead of doing an fsync per block written</emphasis>
+ </para>
+ </listitem>
+
</itemizedlist>
</sect3>
<sect3>
</para>
</listitem>
+ <listitem>
+ <para>
+ <emphasis>Teach replication connections to respect the value of
+ log_connections</emphasis>
+ </para>
+ <para>
+ Previously, they were always logged.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>Log restartpoints in the same fashion as
+ checkpoints</emphasis>
+ </para>
+ <para>
+ Previously, less information was logged for restartpoints.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>By default, set wal_buffers to a reasonable value, based
+ on the setting for shared_buffers</emphasis>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>Add new recovery.conf parameter, pause_at_recovery_target,
+ which defaults to on.</emphasis>
+ </para>
+ <para>
+ This is a behavior change from previous releases, which entered normal
+ running upon reaching the recovery target.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>Add new recovery.conf parameter, recovery_target_name,
+ allowing recovery to proceed to a named restore point</emphasis>
+ </para>
+ <para>
+ Named restore points can be created using a new server function,
+ pg_create_restore_point.
+ </para>
+ </listitem>
+
</itemizedlist>
</sect3>
<sect3>
</para>
</listitem>
+ <listitem>
+ <para>
+ <emphasis>Implement remaining fields of
+ information_schema.sequences view</emphasis>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>Add a "conflicts" column to pg_stat_database</emphasis>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>New system view pg_stat_database_conflicts</emphasis>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>New system view pg_stat_replication</emphasis>
+ </para>
+ <para>
+ This view shows which replication slaves are connected to the master,
+ and reports their status and replication progress.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>When an autovacuum worker (other than one performing an
+ anti-wraparound vacuum) is unable to obtain a lock on the target
+ relation without blocking, skip the relation.</emphasis>
+ </para>
+ <para>
+ This avoids pinning down an autovacuum worker. The next autovacuum
+ cycle will try again.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>When an autovacuum worker (other than one performing an
+ anti-wraparound vacuum) is unable to obtain a lock on the target
+ relation without blocking, skip the relation.</emphasis>
+ </para>
+ <para>
+ This avoids pinning down an autovacuum worker. The next autovacuum
+ cycle will try again.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>Track time of last statistics reset on databases and
+ bgwriter</emphasis>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>Allow standby servers to send information on running
+ transactions back to the master</emphasis>
+ </para>
+ <para>
+ When enabled, this prevents most recovery conflicts on the slave,
+ but may cause MVCC bloat on the master.
+ </para>
+ </listitem>
+
</itemizedlist>
</sect3>
<sect3>
</para>
</listitem>
+ <listitem>
+ <para>
+ <emphasis>Add REPLICATION privilege for ROLEs.</emphasis>
+ </para>
+ <para>
+ This makes it possible for replication to be performed by a
+ non-superuser account.
+ </para>
+ </listitem>
+
</itemizedlist>
</sect3>
<sect3>
</para>
</listitem>
+ <listitem>
+ <para>
+ <emphasis>Add pg_is_xlog_replay_paused, pg_xlog_replay_pause, and
+ pg_xlog_replay_resume functions.</emphasis>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>Change pg_last_xlog_receive_location not to move
+ backwards.</emphasis>
+ </para>
+ </listitem>
+
</itemizedlist>
</sect3>
<sect3>
</para>
</listitem>
+ <listitem>
+ <para>
+ <emphasis>Support streaming base backups.</emphasis>
+ </para>
+ <para>
+ A new client, pg_basebackup, can be used to perform a streaming base
+ backup.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>Add a directory output format to pg_dump</emphasis>
+ </para>
+ </listitem>
+
</itemizedlist>
</sect3>
<sect3>
with (at present) no default value.
</para>
</listitem>
-
<listitem>
<para>
Add a \sf (show function) command to psql, for those
</para>
</listitem>
+ <listitem>
+ <para>
+ <emphasis>Add a \dL command to psql, to list procedural
+ languages</emphasis>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>Allow psql to automatically deduce the client encoding from
+ the locale</emphasis>
+ </para>
+ </listitem>
+
</itemizedlist>
</sect3>
<sect3>
</itemizedlist>
</sect3>
+ <sect3>
+ <title>ecpg</title>
+ <itemizedlist>
+ <listitem>
+ <para>
+ <emphasis>Allow ecpg to accept dynamic cursor names even in WHERE
+ CURRENT OF clauses</emphasis>
+ </para>
+ </listitem>
+ </itemizedlist>
+ </sect3>
<sect3>
<title>Procedural Languages</title>
<sect4>
Allow generic record arguments to PL/Perl functions
</para>
</listitem>
+
+ <listitem>
+ <para>
+ <emphasis>Convert PostgreSQL arrays passed to PL/perl functions to
+ Perl arrays</emphasis>
+ </para>
+ </listitem>
+ </itemizedlist>
+ </sect4>
+
+ <sect4>
+ <title>PL/Python</title>
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ <emphasis>Fix an error when a set-returning function fails halfway
+ through</emphasis>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>Skip dropped attributes when converting Python objects to
+ tuples</emphasis>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>Improve messages for errors in compiling anonymous
+ PL/Python blocks</emphasis>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>Improve the handling of exceptions</emphasis>
+ </para>
+ <para>
+ Fix the way that exceptions are handled by the plpy module for Python
+ 3. Get rid of the global variable holding the error state, and
+ instead arrange to report PostgreSQL errors to Python immediately.
+ Call PLy_spi_execute_fetch_result inside the try/catch block, so that
+ errors from fetching tuples are correct reported as errors in the
+ SPI call. Use the built-in TypeError, not SPIError, for errors
+ having to do with argument counts or types. Use SPIError, not simply
+ plpy.Error, for errors in PLy_spi_execute_plan. Do not set
+ a Python exception if PyArg_ParseTuple failed, as it already sets
+ the correct exception.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>Do not prefix error messages with the string
+ "PL/Python: "</emphasis>
+ </para>
+ <para>
+ It is redundant, given the error context.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>Check PL/Python functions for syntax errors at creation
+ time</emphasis>
+ </para>
+ <para>
+ Previously, even gross syntax errors would not be detected until
+ the function was executed.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>Allow Python try/catch blocks to catch exceptions arising
+ from SPI calls</emphasis>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>Invalidate PL/python functions with composite type
+ arguments when the type changes</emphasis>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>Add quoting functions plpy.quote_ident, plpy.quote_literal,
+ and plpy.quote_nullable</emphasis>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>Support table functions</emphasis>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>Add a plpy.subtransaction() context manager</emphasis>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>Provide a separate exception class for each error code
+ the backend defines, and make it possible to get the SQLSTATE from
+ the exception object</emphasis>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>Assorted code cleanup</emphasis>
+ </para>
+ <para>
+ We now use HTABs instead of Python dictionary objects to cache
+ procedures. palloc is used in TopMemoryContext instead of malloc.
+ Avoid use of undocumented API PyObject_NEW. Free plan values in
+ the PlyPlanObject dealloc function. Add braces around an if block,
+ for readability. Refactor PLy_spi_prepare to save two levels of
+ indentation. Avoid palloc(0).
+ </para>
+ </listitem>
</itemizedlist>
</sect4>
</sect3>
+
<sect3>
<title>Additional Supplied Modules</title>
<itemizedlist>
</para>
</listitem>
+ <listitem>
+ <para>
+ <emphasis>New module contrib/sepgsql, an SE-Linux integration for
+ PostgreSQL</emphasis>
+ </para>
+ </listitem>
+
<listitem>
<para>
Updates to contrib/isn ISBN tables
</para>
</listitem>
+ <listitem>
+ <para>
+ <emphasis>New module contrib/pg_test_fsync, replacing
+ src/tools/test_fsync</emphasis>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>In contrib/pageinspect, fix the heap_page_item to return
+ infomasks as 32 bit values</emphasis>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>In contrib/btree_gist, support KNN GiST searches</emphasis>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>In contrib/pg_trgm, support LIKE, ILIKE, and KNN GiST
+ searches</emphasis>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>Several improvements to contrib/intarray</emphasis>
+ </para>
+ <para>
+ Correct the behavior of array containment operators, so that an empty
+ array is contained in any other array. Fix bogus failures where
+ operators would claim that nulls were present when they really
+ weren't. Remove arbitrary restriction to 1-D arrays.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>Fix pg_upgrade not to insist on pg_dumpall and psql in the
+ old cluster, since we don't need them, but do check for pg_resetxlog
+ in the old and new clusters, since we do. Avoid a useless attempt
+ to call pg_config in the old cluster.</emphasis>
+ </para>
+ </listitem>
+
</itemizedlist>
</sect3>
<sect3>
</para>
</listitem>
+ <listitem>
+ <para>
+ <emphasis>Allow make check in PL directories</emphasis>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>Add a make check-world target</emphasis>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <emphasis>PGXS support for contrib/hstore</emphasis>
+ </para>
+ </listitem>
+
</itemizedlist>
</sect3>
</sect2>