<!-- doc/src/sgml/release-9.1.sgml -->
<sect1 id="release-9-1">
- <title>Release 9.1</title>
+ <title>Release 9.1alpha5</title>
+ <sect2>
+ <title>Overview</title>
+ <para>
+ PostgreSQL alpha releases are snapshots of development code.
+ They are intended to preview and test upcoming features and to
+ provide the possibility for early feedback. They should not be
+ used in production installations or active development projects.
+ While the PostgreSQL code is continuously subject to a number
+ of automated and manual tests, alpha releases might have serious
+ bugs. Also features may be changed incompatibly or removed at
+ any time during the development cycle.
+ </para>
+ <para>
+ The development cycle of a PostgreSQL major release alternates
+ between periods of development and periods of integration work,
+ called commit fests, normally one month each. Alpha releases are
+ planned to be produced at the end of every commit fest, thus every
+ two months. Since the first commit fest starts within a month from
+ the beginning of development altogether, early alpha releases are
+ not indicative of the likely feature set of the final release.
+ </para>
+ </sect2>
+ <sect2>
+ <title>Testing</title>
+ <para>
+ The primary reason we release alphas is to get users to test new
+ features as early as possible. If you are interested in helping
+ with organized testing, please see
+ <ulink url="http://wiki.postgresql.org/wiki/HowToBetaTest">the
+ testing information page</ulink>.
+ </para>
+ </sect2>
+
+<!--
<note>
<title>Release Date</title>
<simpara>2011-??-??</simpara>
<para>
This release of
<productname>PostgreSQL</> adds ... Major enhancements include:
+ (This list duplicates items below, but without authors or details)
</para>
- <!-- This list duplicates items below, but without authors or details-->
<para>
The above items are explained in more detail in the sections below.
</para>
</sect2>
+-->
<sect2>
</sect2>
</sect1>
-
-
-
-<!-- This is (hopefully) up-to-date with commits through 2011-03-08 -->
-
-
- <sect1 id="release-9-1-alpha">
- <title>Release 9.1alpha4</title>
- <sect2>
- <title>Overview</title>
- <para>
- PostgreSQL alpha releases are snapshots of development code.
- They are intended to preview and test upcoming features and to
- provide the possibility for early feedback. They should not be
- used in production installations or active development projects.
- While the PostgreSQL code is continuously subject to a number
- of automated and manual tests, alpha releases might have serious
- bugs. Also features may be changed incompatibly or removed at
- any time during the development cycle.
- </para>
- <para>
- The development cycle of a PostgreSQL major release alternates
- between periods of development and periods of integration work,
- called commit fests, normally one month each. Alpha releases are
- planned to be produced at the end of every commit fest, thus every
- two months. Since the first commit fest starts within a month from
- the beginning of development altogether, early alpha releases are
- not indicative of the likely feature set of the final release.
- </para>
- <para>
- The release notes below highlight user visible changes and new
- features. There are normally numerous bug fixes and performance
- improvements in every new snapshot of PostgreSQL, and it would be
- too bulky to attempt to list them all. Note that many bug fixes are
- also backported to stable releases of PostgreSQL, and you should be
- using those if you are looking for bug-fix-only upgrades for your
- current installations.
- </para>
- <para>
- These notes are cumulative over all alpha releases of the current
- development cycle. Items that are new in the latest alpha release are
- <emphasis>emphasized</emphasis>.
- </para>
- </sect2>
- <sect2>
- <title>Migration</title>
- <para>
- To upgrade from any release to an alpha release or from an alpha
- release to any other release will most likely require a
- dump/restore upgrade procedure. It may happen that this is not
- necessary in particular cases, but that is not verified beforehand.
- (The server will warn you in any case when a dump/restore is
- necessary if you attempt to use it with an old data directory.)
- Note, however, that the dump/restore upgrade procedure is expected
- to work for alpha releases, and problems in this area should be
- reported.
- </para>
- </sect2>
- <sect2>
- <title>Testing</title>
- <para>
- The primary reason we release alphas is to get users to test new
- features as early as possible. If you are interested in helping
- with organized testing, please see
- <ulink url="http://wiki.postgresql.org/wiki/HowToBetaTest">the
- testing information page</ulink>.
- </para>
- </sect2>
- <sect2>
- <title>Changes</title>
-
- <sect3>
- <title>Replication and Recovery</title>
- <itemizedlist>
-
- <listitem>
- <para>
- <emphasis>Support named restore points</emphasis>
- </para>
- <para>
- Named restore points can be created using a new server function,
- pg_create_restore_point. A new recovery.conf parameter,
- recovery_target_name, allows recovery to stop at a named restore
- point.
- </para>
- </listitem>
-
- <listitem>
- <para>
- <emphasis>Add new <filename>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 pg_is_xlog_replay_paused, pg_xlog_replay_pause, and
- pg_xlog_replay_resume functions</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>
-
- <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>Synchronous replication</emphasis>
- </para>
- <para>
- When enabled, transaction commit will wait for WAL records to be
- replicated before informing the client that a transaction has
- successfully committed.
- </para>
- </listitem>
-
- <listitem>
- <para>
- <emphasis>When recovery_target_timeline='latest', periodically
- rescan the archive for new timelines</emphasis>
- </para>
- </listitem>
-
- </itemizedlist>
- </sect3>
-
- <sect3>
- <title>SQL Features</title>
- <itemizedlist>
-
- <listitem>
- <para>
- Add ALTER ... SET SCHEMA support for conversions,
- operators, operator classes, operator families, text search
- configurations, text search dictionaries, text search
- parsers, and text search templates
- </para>
- </listitem>
-
- <listitem>
- <para>
- Make TRUNCATE ... RESTART IDENTITY restart sequences transactionally
- </para>
-
- <para>
- Previously, the sequence restart did not roll back on error.
- This meant that an error between truncating and committing
- left the sequences out of sync with the table contents, with
- potentially bad consequences as were noted in a Warning on
- the TRUNCATE man page.
- </para>
- </listitem>
-
- <listitem>
- <para>
- Prevent invoking I/O conversion casts via
- functional/attribute notation
- </para>
- <para>
- This was found to be confusing in some cases. The
- functionality is still available via cast syntax.
- </para>
- </listitem>
-
- <listitem>
- <para>
- Add ALTER TYPE ... ADD/DROP/ALTER/RENAME ATTRIBUTE
- </para>
- </listitem>
-
- <listitem>
- <para>
- Support triggers on views
- </para>
-
- <para>
- This adds the SQL-standard concept of an INSTEAD OF trigger,
- which is fired instead of performing a physical
- insert/update/delete. The trigger function is passed the
- entire old and/or new rows of the view, and must figure out
- what to do to the underlying tables to implement the update.
- So this feature can be used to implement updatable views
- using trigger programming style rather than rule hacking.
- </para>
- </listitem>
-
- <listitem>
- <para>
- Allow WITH clauses to be attached to INSERT, UPDATE, DELETE
- statements
- </para>
- </listitem>
-
- <listitem>
- <para>
- <emphasis>Allow INSERT/UPDATE/DELETE to be used inside a WITH
- clause</emphasis>
- </para>
- </listitem>
-
- <listitem>
- <para>
- Allow new values to be added to an existing enum type
- </para>
- </listitem>
-
- <listitem>
- <para>
- Recognize functional dependency on primary
- keys
- </para>
- <para>
- This allows a table's other columns to be referenced without listing
- them in GROUP BY, so long as the primary key column(s) are listed in
- GROUP BY.
- </para>
- </listitem>
-
- <listitem>
- <para>
- Add CREATE TABLE IF NOT EXISTS
- </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 Serializable Snapshot Isolation, in order to
- provide a more robust serializable transaction mode</emphasis>
- </para>
- <para>
- In previous releases, the REPEATABLE READ and SERIALIZABLE isolation
- levels were identical. The historical behavior of REPEATABLE READ is
- unchanged in this release, but SERIALIZABLE now provides stronger
- guarantees.
- </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>
- <title>Performance</title>
- <itemizedlist>
-
- <listitem>
- <para>
- Optimize the commit_siblings configuration parameter
- </para>
- </listitem>
-
- <listitem>
- <para>
- KNN GiST, otherwise known as order-by-operator support for GiST
- </para>
-
- <para>
- This can be used to optimize nearest-neighbor searches.
- </para>
- </listitem>
-
- <listitem>
- <para>
- Improve process shutdown speed
- </para>
- </listitem>
-
- <listitem>
- <para>
- Speed up conversion of signed integers to C strings
- </para>
- </listitem>
-
- <listitem>
- <para>
- Support MergeAppend plans, to allow sorted output
- from append relations
- </para>
-
- <para>
- This eliminates the former need to sort the output of an
- Append scan when an ordered scan of an inheritance tree is
- wanted. This should be particularly useful for fast-start
- cases such as queries with LIMIT.
- </para>
- </listitem>
-
- <listitem>
- <para>
- <emphasis>Support unlogged tables</emphasis>
- </para>
- <para>
- The contents of an unlogged table are not WAL-logged; thus, they
- are not 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>
- Teach CLUSTER to use seqscan-and-sort when it's faster than
- indexscan
- </para>
- </listitem>
-
- <listitem>
- <para>
- Improve GIN indexscan cost estimation
- </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>
- Reduce lock levels of CREATE TRIGGER and some ALTER
- TABLE, CREATE RULE actions
- </para>
- </listitem>
-
- <listitem>
- <para>
- Add some knowledge about prefix matches to
- tsmatchsel()
- </para>
- </listitem>
-
- <listitem>
- <para>
- Replace the naive HYPOT() macro with a
- standards-conformant hypotenuse function
- </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>
- <title>Server Settings</title>
- <itemizedlist>
-
- <listitem>
- <para>
- Change the default value of
- <literal>standard_conforming_strings</> to
- <literal>on</>
- </para>
- <warning>
- <para>
- This is a significant incompatibility with previous releases,
- because it may break unwary applications in security-critical ways.
- </para>
- </warning>
- </listitem>
-
- <listitem>
- <para>
- Add <literal>log_file_mode</> parameter
- </para>
- <para>
- This allows control of the file permissions set on log files created
- by the syslogger process.
- </para>
- </listitem>
-
- <listitem>
- <para>
- Add <literal>restart_after_crash</> parameter
- </para>
- <para>
- Normally, we automatically restart after a backend crash, but in
- some cases when PostgreSQL is invoked by clusterware it may be
- desirable to suppress this behavior, so we now provide an option which
- does that.
- </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>
-
- </itemizedlist>
- </sect3>
- <sect3>
- <title>Administration and Monitoring</title>
- <itemizedlist>
-
- <listitem>
- <para>
- Instrument checkpoint sync calls
- </para>
- </listitem>
-
- <listitem>
- <para>
- Use the same lexer for recovery.conf that has been used for
- <filename>postgresql.conf</> (Dimitri Fontaine)
- </para>
-
- <para>
- Among other things, this allows values in recovery.conf to be unquoted.
- </para>
- </listitem>
-
- <listitem>
- <para>
- Add column buffers_backend_fsync to pg_stat_bgwriter
- </para>
- </listitem>
-
- <listitem>
- <para>
- Add monitoring function pg_last_xact_replay_timestamp()
- </para>
- </listitem>
-
- <listitem>
- <para>
- Allow pg_ctl to register the service in either AUTO or DEMAND start
- type
- </para>
- </listitem>
-
- <listitem>
- <para>
- Support host names and host key word <literal>all</literal>
- in <filename>pg_hba.conf</filename>
- </para>
- </listitem>
-
- <listitem>
- <para>
- Make EXPLAIN show the function call expression of a
- FunctionScan plan node, but only in VERBOSE mode
- </para>
- </listitem>
-
- <listitem>
- <para>
- Make EXPLAIN print PARAM_EXEC Params as
- the referenced expressions, rather than just $N
- </para>
- </listitem>
-
- <listitem>
- <para>
- Add vacuum and analyze counters to pg_stat_*_tables
- views
- </para>
- </listitem>
-
- <listitem>
- <para>
- Add stats functions and views to provide access to a
- transaction's own statistics counts
- </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>Track time of last statistics reset on databases and
- bgwriter</emphasis>
- </para>
- </listitem>
-
- </itemizedlist>
- </sect3>
- <sect3>
- <title>Security</title>
- <itemizedlist>
-
- <listitem>
- <para>
- Add SECURITY LABEL command
- </para>
- <para>
- This is intended as infrastructure to support integration
- with label-based mandatory access control systems such as
- SE-Linux.
- </para>
- </listitem>
-
- <listitem>
- <para>
- Add server authentication over Unix-domain
- sockets
- </para>
- <para>
- This adds a libpq connection parameter <literal>requirepeer</> that
- specifies the user name that the server process is expected to run
- under.
- </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>
- <title>Built-in Functions</title>
- <itemizedlist>
-
- <listitem>
- <para>
- Add pg_read_binary_file() and whole-file-at-once
- versions of pg_read_file()
- </para>
- </listitem>
-
- <listitem>
- <para>
- Add new function format(), for sprintf-like string formatting
- </para>
- </listitem>
-
- <listitem>
- <para>
- Add pg_describe_object() function to obtain textual
- descriptions of objects as stored in pg_depend
- </para>
- </listitem>
-
- <listitem>
- <para>
- Accept <literal>public</literal> as a pseudo-role
- name in <literal>has_table_privilege()</literal> and friends
- to see if a particular privilege has been granted to
- <literal>PUBLIC</literal>
- </para>
- </listitem>
-
- <listitem>
- <para>
- Add string functions: concat(), concat_ws(), left(),
- right(), and reverse()
- </para>
- </listitem>
-
- <listitem>
- <para>
- Add three-parameter forms of array_to_string and
- string_to_array
- </para>
- </listitem>
-
- <listitem>
- <para>
- Add XMLEXISTS function
- </para>
- </listitem>
-
- <listitem>
- <para>
- Add xpath_exists() function
- </para>
- <para>
- This is equivalent to XMLEXISTS except that it offers support for
- namespace mapping.
- </para>
- </listitem>
-
- <listitem>
- <para>
- Add xml_is_well_formed, xml_is_well_formed_document,
- xml_is_well_formed_content functions to the core XML
- code
- </para>
- <para>
- These supersede a version previously offered by contrib/xml2.
- </para>
- </listitem>
-
- <listitem>
- <para>
- <emphasis>Change pg_last_xlog_receive_location not to move
- backwards</emphasis>
- </para>
- </listitem>
-
- </itemizedlist>
- </sect3>
- <sect3>
- <title>Data Types</title>
- <itemizedlist>
-
- <listitem>
- <para>
- Allow numeric to use a more compact, 2-byte header in
- many cases
- </para>
- </listitem>
-
- <listitem>
- <para>
- Add support for dividing money by money (yielding a
- float8 result) and for casting between money and numeric
- </para>
- </listitem>
-
- </itemizedlist>
- </sect3>
- <sect3>
- <title>Server Tools</title>
- <itemizedlist>
-
- <listitem>
- <para>
- Add options to force quoting of all
- identifiers
- </para>
- <para>
- This includes a quote_all_identifiers parameter which affects the
- behavior of the backend, and a --quote-all-identifiers argument to
- pg_dump and pg_dumpall which sets the parameter and also affects the
- quoting done internally by those applications.
- </para>
- </listitem>
-
- <listitem>
- <para>
- <emphasis>Add a directory output format to pg_dump</emphasis>
- </para>
- </listitem>
-
- </itemizedlist>
- </sect3>
- <sect3>
- <title><application>psql</></title>
- <itemizedlist>
-
- <listitem>
- <para>
- Add <quote>S</quote> option to \dn command in <application>psql</>
- </para>
- <para>
- System schemas are now hidden by default by \dn.
- </para>
- </listitem>
-
- <listitem>
- <para>
- Add \conninfo command to <application>psql</>, to show current connection
- info
- </para>
- </listitem>
-
- <listitem>
- <para>
- Extend <application>psql</>'s \e and \ef commands so that a line number
- can be specified, and the editor's cursor will be initially placed
- on that line
- </para>
- <para>
- To avoid assumptions about what switch the user's editor takes for
- this purpose, there is a new <application>psql</> variable EDITOR_LINENUMBER_SWITCH
- with (at present) no default value.
- </para>
- </listitem>
- <listitem>
- <para>
- Add a \sf (show function) command to <application>psql</>, for those
- times when you need to look at a function but don't wish to fire up
- an editor
- </para>
- </listitem>
-
- <listitem>
- <para>
- Make <application>psql</> distinguish between unique indices and unique
- constraints in \d printout
- </para>
- </listitem>
-
- <listitem>
- <para>
- <emphasis>Add a \dL command to <application>psql</>, to list procedural
- languages</emphasis>
- </para>
- </listitem>
-
- <listitem>
- <para>
- <emphasis>Allow <application>psql</> to automatically deduce the client encoding from
- the locale</emphasis>
- </para>
- </listitem>
-
- </itemizedlist>
- </sect3>
- <sect3>
- <title>libpq</title>
- <itemizedlist>
-
- <listitem>
- <para>
- Add PQlibVersion() function
- </para>
- </listitem>
-
- <listitem>
- <para>
- When reporting the server as not responding, if the
- hostname was supplied, also print the IP address
- </para>
- <para>
- This allows IPv4 and IPv6 failures to be distinguished. Also
- useful when a hostname resolves to multiple IP addresses.
- </para>
- </listitem>
-
- <listitem>
- <para>
- Add functions PQping and PQpingParams to allow
- detection of the server's status, including a status where
- the server is running but refuses ordinary connections
- </para>
- <para>
- pg_ctl uses the new function. This fixes the case where
- pg_ctl reports that the server is not running (cannot
- connect) but in fact it is running.
- </para>
- </listitem>
-
- </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>
- <title>PL/pgSQL</title>
- <itemizedlist>
-
- <listitem>
- <para>
- Modify the handling of RAISE without parameters so that
- the error it throws can be caught in the same places that could
- catch an ordinary RAISE ERROR in the same location
- </para>
- <para>
- The previous coding insisted on throwing the error from the block
- containing the active exception handler; which is arguably more
- surprising, and definitely unlike Oracle's behavior.
- </para>
- </listitem>
-
- <listitem>
- <para>
- Remove ancient PL/pgSQL line numbering hack
- </para>
- <para>
- PL/pgSQL used to count the second line of the function body as
- <quote>line 1</>, if the first line was zero-length.
- While this hack arguably has some benefit in terms of making
- PL/pgsql's line numbering match the programmer's expectations, it
- also makes PL/pgsql inconsistent with the remaining PLs, making it
- difficult for clients to reliably determine where the error
- actually is. On balance, it seems better to be consistent.
- </para>
- </listitem>
-
- </itemizedlist>
- </sect4>
-
- <sect4>
- <title>PL/Perl</title>
-
- <itemizedlist>
- <listitem>
- <para>
- 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>Make plpy.Fatal() raise FATAL, rather than ERROR</emphasis>
- </para>
- </listitem>
-
- <listitem>
- <para>
- <emphasis>Skip dropped attributes when converting Python objects to
- tuples</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>Improve error reporting</emphasis>
- </para>
- <para>Better error messages for errors in compiling anonymous
- PL/Python blocks. Avoid prefixing error messages with the string
- "PL/Python: ", which is redundant, given the error
- context. Provide a separate exception class for each error code
- the backend defines, and make it possible to get the SQLSTATE from
- the exception object. Report Python errors from iterators
- using PLy_elog, so that the Python exception is included in the
- exception, and to avoid setting the errcode to
- ERRCODE_DATA_EXCEPTION.
- </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>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>
-
- <listitem>
- <para>
- New module contrib/auth_delay
- </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>
- Add the ability to compute per-statement latencies (ie,
- average execution times) to pgbench
- </para>
- </listitem>
-
- <listitem>
- <para>
- Teach levenshtein() about multi-byte
- characters
- </para>
- </listitem>
-
- <listitem>
- <para>
- Add btree_gist support for searching on <quote>not
- equals</quote>
- </para>
- </listitem>
-
- <listitem>
- <para>
- Add ssl_cipher() and ssl_version() functions to
- contrib/sslinfo
- </para>
- </listitem>
-
- <listitem>
- <para>
- Remove the arbitrary (and undocumented) limit on the
- number of parameter=value pairs that can be handled by
- xslt_process()
- </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>
- <title>Source Code, Build Options</title>
- <itemizedlist>
-
- <listitem>
- <para>
- Rewrite the GiST insertion logic so that the
- post-recovery cleanup stage to finish incomplete inserts or
- splits is not needed anymore
- </para>
- </listitem>
-
- <listitem>
- <para>
- Add support for collecting <quote>minidump</quote>-style crash dumps
- on Windows
- </para>
- </listitem>
-
- <listitem>
- <para>
- Replace pg_class.relistemp column with relpersistence
- </para>
-
- <para>
- This is for upcoming work on unlogged and global temporary tables.
- </para>
- </listitem>
-
- <listitem>
- <para>
- GNU make 3.80 or newer is now required
- </para>
- </listitem>
-
- <listitem>
- <para>
- Improved support for parallel make, make -k, and make -q
- </para>
- </listitem>
-
- <listitem>
- <para>
- Include the backend ID in the relpath of temporary
- relations
- </para>
- <para>
- This allows us to reliably remove all leftover temporary relation
- files on cluster startup without reference to system catalogs or
- WAL; therefore, we no longer include temporary relations in
- XLOG_XACT_COMMIT and XLOG_XACT_ABORT WAL records.
- </para>
- </listitem>
-
- <listitem>
- <para>
- Rewrite COMMENT ON <replaceable>object</> code for better
- modularity, and add necessary locking
- </para>
- </listitem>
-
- <listitem>
- <para>
- Add a hook in ExecCheckRTPerms() for eventual use by
- external security-checking modules
- </para>
- </listitem>
-
- <listitem>
- <para>
- Standardize names and calling conventions of
- get_whatever_oid functions
- </para>
- </listitem>
-
- <listitem>
- <para>
- Make NestLoop plan nodes pass outer-relation variables
- into their inner relation using the general PARAM_EXEC executor
- parameter mechanism, rather than the ad-hoc kluge of passing the
- outer tuple down through ExecReScan
- </para>
- </listitem>
-
- <listitem>
- <para>
- Make details of the Numeric representation private to
- numeric.c
- </para>
- </listitem>
-
- <listitem>
- <para>
- Suppress some compiler warnings from
- <literal>clang</>
- </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>
- </sect1>
-