Release 9.1 Release Date 2011-??-?? Overview This release of PostgreSQL adds ... Major enhancements include: The above items are explained in more detail in the sections below. Migration to Version 9.1 A dump/restore using pg_dump, or use of pg_upgrade, is required for those wishing to migrate data from any previous release. Version 9.1 contains a number of changes that ... Observe the following incompatibilities: Strings Change the default value of standard_conforming_strings to on (Robert Haas) This removes a long-standing incompatibility with the SQL standard; escape_string_warning has produced warnings about this usage for years. E'' strings the proper way to embed escapes in strings and is unaffected by this change. Casting Disallow functional or attribute string data type casts for composite types (Tom Lane) For example, disallow composite_name.text and text(composite_name). CAST and :: are still available for casting. Tighten casting checks for domains based on arrays (Tom Lane) **Details? Arrays Change string_to_array() to return an empty array for a zero-length string (Pavel Stehule) Previously this returned NULL. Change string_to_array() so a NULL separator splits the string into characters (Pavel Stehule) Previously this returned NULL. Object Modification Fix improper checks for before/after triggers (Tom Lane) **Tom, I need more details on the impact of this for existing installs. Require superuser or CREATEROLE permissions in order to set role comments (Tom Lane) Server Settings Change pg_last_xlog_receive_location() so it never moves backwards (Fujii Masao) Previously pg_last_xlog_receive_location() could move backward when streaming replication is restarted. Have logging of replication connections honor log_connections (Magnus Hagander) Previously replication connections were always logged. <link linkend="plpgsql">PL/pgSQL</link> Server-Side Language Change PL/pgSQL's RAISE command without parameters to be catchable by the attached exception block (Piyush Newe) Previously RAISE in a code block always scoped to an attached exception block, so it was uncatchable at the same scope. Adjust PL/pgSQL's error line reporting code to be consistent with SQL error line reporting (Pavel Stehule) Previously error numbering was off by one. Other Incompatibilities Have pg_stat_reset() reset all database-level statistics (Tom Lane) Some counters were not being reset. Fix some information_schema.triggers column names to match the new SQL-standard names (Dean Rasheed) Treat ECPG cursor names as case-insensitive (Zoltan Boszormenyi) Changes, current as of 2011-03-15 Version 9.1 has ... Server Performance Allow unlogged tables using UNLOGGED during CREATE TABLE (Robert Haas) These tables are optimized for performance but are cleared in case of a server crash. Support RIGHT and FULL OUTER JOIN in hash joins (Tom Lane) Previously hash joins could not be considered for outer joins; this provides additional query optimization possibilities. **What about LEFT joins? Merge duplicate fsync requests on busy systems (Robert Haas, Greg Smith) Improve performance of commit_siblings (Greg Smith) This allows the use of commit_siblings with less overhead. Optimizer Allow inheritance table queries to return meaningfully-sorted results (Greg Stark, Hans-Jurgen Schonig, Robert Haas, Tom Lane) This allows optimization of ORDER BY and LIMIT clauses in inheritance table queries. Allow optimizations of MIN/MAX for inheritance table queries (Tom Lane) Allow hash joins for array values (Tom Lane) This provides additional query optimization possibilities. Improve GIN index scan cost estimation (Teodor Sigaev) Authentication Support host names and host suffixes (e.g. .example.com) in pg_hba.conf (Peter Eisentraut) Previously only host IP addresses and CIDR values were supported. Support the keyword 'all' in the host column of pg_hba.conf (Peter Eisentraut) Previously people used 0.0.0.0/0 or ::/0 for this. Allow GSSAPI to be used to authenticate to servers via SSPI (Christian Ullrich) Specifically this allows Unix-based GSSAPI clients to authenticate to Windows SSPI servers. Monitoring Add details to the logging of restart points and checkpoints, which is controlled by log_checkpoints (Fujii Masao, Greg Smith) New details show WAL file and sync activity. Add log_file_mode which controls the permissions on log files created by the logging_collector (Martin Pihlak) Statistical Views Add client_hostname field to pg_stat_activity (Peter Eisentraut) Previously only the client address was reported. Add pg_stat_xact_* statistic functions and views (Joel Jacobson) These are like the database-wide statistics counter views but reflect counts for only the current transaction. Add the pg_stat_database_conflicts system view to show queries that have been canceled and the reason (Magnus Hagander) Cancelations can occur because of dropped tablespaces, lock timeouts, old snapshots, pinned buffers, and deadlocks. Add a conflicts count to pg_stat_database (Magnus Hagander) This is the number of conflicts that occurred in the database. Add record of last reset in database and background writer-level statistics views (Tomas Vondra) Add columns showing the number of vacuum and analyze operations in pg_stat_*_tables views (Magnus Hagander) Add new buffers_backend_fsync field to pg_stat_bgwriter (Greg Smith) This new field counts the number of times a backend fsyncs a buffer. Server Settings Allow auto-tuning of wal_buffers (Greg Smith) wal_buffers is now auto-tuned by default based on the size of shared_buffers. Add restart_after_crash which disables server restart after a backend crash (Robert Haas) This is designed for cluster managers that want to control restarts. Continuous Archiving and Streaming Replication Add a synchronous_replication option (Simon Riggs, Fujii Masao) This allows the primary to wait for the standby to receive transaction information before acknowledging the commit. Add variable hot_standby_feedback to enable standbys to communicate their needed snapshots to the primary (Simon Riggs) This helps avoid cancelling long-running queries on the standby. Add support for sending file system backups to standbys using the streaming replication network connection (Magnus Hagander, Heikki Linnakangas) This avoids the requirement of manually transferring a file system backup when creating a standby server. Add command-line tool pg_basebackup for creating a new standby server or database backup (Magnus Hagander) Add new replication permission for roles (Magnus Hagander) This is a read-only permission used for streaming replication and allows non-superusers to initiate replication connections. Previously only superusers could initiate replication connections; superusers have this permission by default. Monitoring Add system view pg_stat_replication which displays activity of WAL sender processes (Itagaki Takahiro, Simon Riggs) This reports the status of all connected standby servers. Add monitoring function pg_last_xact_replay_timestamp() (Fujii Masao) This returns the time on the primary that generated the most recent commit or abort record applied on the standby. Recovery Control Add functions to control streaming replication replay (Simon Riggs) The new functions are pg_xlog_replay_pause(), pg_xlog_replay_resume(), and the status function pg_is_xlog_replay_paused(). Add the ability to create named restore points using pg_create_restore_point() (Jaime Casanova) These named restore points can be specified as recovery targets in recovery.conf. Add recovery.conf setting pause_at_recovery_target to pause recovery at target (Simon Riggs) This allows a recovery server to be queried to check if the recovery point is the one desired. Allow standby recovery to switch to a new timeline automatically (Heikki Linnakangas) Now standby servers scan the archive directory for new timelines periodically. Allow recovery.conf to use the same quoting behavior as postgresql.conf (Dimitri Fontaine) Previously all values had to be quoted. Queries Allow data-modification commands (INSERT/UPDATE/DELETE) in WITH clauses (Marko Tiikkaja, Hitoshi Harada) This allows INSERT/UPDATE/DELETE RETURNING in WITH clauses to pass rows to outer queries. Allow WITH clauses to be fed into INSERT, UPDATE, DELETE statements (Marko Tiikkaja, Hitoshi Harada) Specifically, let SELECT query results be fed into INSERT, UPDATE, DELETE statements. Allow non-GROUP BY columns in the query target list when the primary key is specified in the GROUP BY clause (Peter Eisentraut) Some other database system already allowed this behavior, and because of the primary key, the result is unambiguous.. Allow the use of the keyword DISTINCT in UNION/INTERSECT/EXCEPT clauses (Tom Lane) DISTINCT is the default behavior so use of this keyword is redundant. Strings Add per-column collation support (Peter Eisentraut, Tom Lane) Previously collation could only be set at the database level. Collation can now be set per column, domain, index, or expression. Object Manipulation Add support for foreign tables (Shigeru Hanada, Robert Haas, Jan Urbanski, Heikki Linnakangas) This allows data stored in foreign sources to be used like native PostgreSQL-stored data. Allow new values to be added to an existing enum type via ALTER TYPE (Andrew Dunstan) Add ALTER TYPE ... ADD/DROP/ALTER/RENAME ATTRIBUTE (Peter Eisentraut) This allows modification of composite types. <command>ALTER</> Object Add RESTRICT/CASCADE to ALTER TYPE operations on typed tables (Peter Eisentraut) This controls ADD/DROP/ALTER/RENAME ATTRIBUTE cascading behavior. Add support for more object types in ALTER ... SET SCHEMA commands (Dimitri Fontaine) <link linkend="SQL-CREATETABLE"><command>CREATE TABLE</></link> Add CREATE TABLE IF NOT EXISTS syntax (Robert Haas) This allows table creation without causing an error if the table already exists. Add ALTER TABLE ... ADD UNIQUE/PRIMARY KEY USING INDEX (Gurjeet Singh) This allows existing unique indexes to be used as primary keys, including indexes that were created concurrently. Allow ALTER TABLE to add foreign keys without validation (Simon Riggs) The new option is called NOT VALID, which can later be modified to VALIDATED and validation checks performed. Allow ALTER TABLE ... SET DATA TYPE to avoid table rewrites in appropriate cases (Noah Misch, Robert Haas) For example, converting a varchar column to text no longer requires a rewrite of the table. **Length changes require rewrite? Object Permissions Add a SECURITY LABEL command (KaiGai Kohei) This allows security labels to be assigned to objects. Utility Operations Add true a serializable isolation level (Kevin Grittner, Dan Ports) Previously asking for serializable isolation level produced snapshot isolation, which had certain documented anomalies. The old snapshot isolation is still accessible by the requesting repeatable read isolation level. Add transaction-level advisory locks (Marko Tiikkaja) This is similar to the existing session-level advisory locks, but are freed at transaction end. Make TRUNCATE ... RESTART IDENTITY restart sequences transactionally (Steve Singer) Previously the counter could have been left out of sync if a backend crashed between the on-commit truncation activity and commit completion. <link linkend="SQL-COPY"><command>COPY</></link> Add ENCODING option to COPY TO/FROM (Hitoshi Harada, Itagaki Takahiro) This allows the encoding of the COPY file to be specified separately from client encoding. Add bidirectional COPY protocol support (Fujii Masao) This is currently only used by streaming replication. <link linkend="SQL-EXPLAIN"><command>EXPLAIN</></link> Have EXPLAIN show the function call expression in VERBOSE mode (Tom Lane) Fix EXPLAIN ANALYZE with rules to use the same snapshot behavior as ordinary queries (Marko Tiikkaja) Previously EXPLAIN ANALYZE used a slightly different snapshot for queries involving rules. <link linkend="SQL-VACUUM"><command>VACUUM</></link> Add additional details to the output of VACUUM FULL VERBOSE and CLUSTER VERBOSE (Itagaki Takahiro) New information includes the live and dead tuple count and whether CLUSTER is using an index to rebuild. Prevent autovacuum from waiting if it cannot acquire a lock (Robert Haas) It will try to vacuum later. Indexes Add nearest-neighbor (order-by-operator) searching to GiST indexes (Teodor Sigaev, Tom Lane) This allows GiST indexes to quickly return LIMIT-specified closest values. Allow GIN indexes to index null and empty values (Tom Lane) This allows full GIN index scans. Fix GiST indexes to be fully crash-safe (Heikki Linnakangas) Previously there were rare cases where a REINDEX would be required (you would be informed). Data Types Allow numeric to use a more compact, two-byte header in many cases (Robert Haas) Previously all numeric values had four-byte headers; this saves on disk storage. Add support for dividing money by money (Andy Balholm) Casting Add support for casting between money and numeric (Andy Balholm) Allow casting a table's row type to the table's supertype if it's a typed table (Peter Eisentraut) **Needs description. <link linkend="functions-xml">XML</link> Add XML function XMLEXISTS and xpath_exists() functions (Mike Fowler) This is used for xpath matching. Add XML functions xml_is_well_formed(), xml_is_well_formed_document(), xml_is_well_formed_content() (Mike Fowler) These check whether the input is properly-formed XML. Functions Add new SQL function, format(text), which behaves like C's printf() (Pavel Stehule, Robert Haas) It currently supports formats for strings, SQL literals, and SQL identifiers. Add string functions: concat(), concat_ws(), left(), right(), and reverse() (Pavel Stehule) **Why were these added? Add function pg_read_binary_file() to read binary files (Dimitri Fontaine, Itagaki Takahiro) Add single-parameter version of function pg_read_file() to read an entire file (Dimitri Fontaine, Itagaki Takahiro) Add three-parameter forms of array_to_string() and string_to_array() for NULL processing control (Pavel Stehule) Object Information Functions Add pg_describe_object() function (Alvaro Herrera) This function is used to obtain comments on objects. **Alvaro, why is this useful for pg_depend? Update comments for built-in operators and their underlying functions (Tom Lane) Add variable quote_all_identifiers to force the quoting of all identifiers in EXPLAIN and system catalog functions like pg_get_viewdef() (Robert Haas) This makes exporting schemas to tools and other databases with different quoting rules easier. Add fields to the information_schema.sequences system view (Peter Eisentraut) Previously, though the view existed, all of these view fields were unimplemented. Allow public as a pseudo-role name in has_table_privilege() and related functions (Alvaro Herrera) This allows checking for public permissions. Add ERRCODE_T_R_DATABASE_DROPPED error code to report recovery conflicts due to dropped databases (Tatsuo Ishii) This is useful for connection pooling software. Function and Trigger Creation Allow INSTEAD OF triggers on views (Dean Rasheed) This feature can be used to implement updatable views. Reduce lock levels for CREATE TRIGGER and some ALTER TABLE, CREATE RULE actions (Simon Riggs) This improves concurrency. Server-Side Languages <link linkend="plpgsql">PL/pgSQL</link> Server-Side Language Add FOREACH IN ARRAY to plpgsql to allow array iteration (Pavel Stehule) This is more efficient than previous methods. <link linkend="plperl">PL/Perl</link> Server-Side Language Allow generic record arguments to PL/Perl functions (Andrew Dunstan) **Andrew, I need details on this. Convert PL/Perl input arguments to Perl arrays (Alexey Klyukin, Alex Hunsaker) String representations are still available. Convert PL/Perl row and composite type arguments to Perl hashes (Alexey Klyukin, Alex Hunsaker) String representations are still available. <link linkend="plpython">PL/Python</link> Server-Side Language Add table function support for PL/Python (Jan Urbanski) PL/Python now can return multiple OUT parameters and record sets. Add validator to PL/Python (Jan Urbanski) This allows PL/Python functions to be validated at function creation time. Allow exceptions for SQL queries in PL/Python (Jan Urbanski) This allows access to SQL-generated exception error codes from PL/Python exception blocks. Allow PL/Python to access SQLSTATE exception values (Jan Urbanski) **Is this the same as the item above? Add PL/Python explicit subtransactions (Jan Urbanski) Add PL/Python functions for quoting strings (Jan Urbanski) The functions are plpy.quote_ident, plpy.quote_literal, and plpy.quote_nullable. Report PL/Python errors from iterators with PLy_elog (Jan Urbanski) Overhaul of PL/Python (Jan Urbanski) This includes exception support for Python 3. **More? Client Applications Mark createlang and droplang as deprecated now that they use the extension framework (Tom Lane) <link linkend="APP-PSQL"><application>psql</></link> Add the \conninfo command to psql, to show current connection information (David Christensen) Allow psql's \e and \ef commands to accept a line number to be used to position the cursor in the editor (Pavel Stehule) This is passed to the editor using the EDITOR_LINENUMBER_SWITCH environment variable. Add psql command \sf command to show a function's definition (Pavel Stehule) Add system table \dn without S now suppresses system schemas. Add new psql \dL command \dL to list languages (Fernando Ike) Have psql set the client encoding from the operating system locale by default (Heikki Linnakangas) This only happens if the PGCLIENTENCODING environment variable is not set. Allow tab completion of psql variables (Pavel Stehule) More psql tab completion support (Itagaki Takahiro) <link linkend="APP-PGDUMP"><application>pg_dump</></link> Add pg_dump and pg_dumpall option Add directory format to pg_dump (Joachim Wieland, Heikki Linnakangas) This is internally similar to the tar pg_dump format. <link linkend="APP-PG-CTL"><application>pg_ctl</></link> Fix pg_ctl so it no longer incorrectly reports that the server is not running (Bruce Momjian) Previously this could happen if the server was running but pg_ctl could not authenticate. Improve pg_ctl start's "wait" ( Add promote option to pg_ctl to change a standby server to primary (Fujii Masao) <application>Development Tools</> <link linkend="libpq"><application>libpq</></link> Add a libpq connection option client_encoding which behaves like the PGCLIENTENCODING environment variable (Heikki Linnakangas) The value auto sets the client encoding based on the operating system locale. Add PQlibVersion() function which returns the libpq library version (Magnus Hagander) libpq already had PQserverVersion() which returns the server version. Allow libpq database clients to use Unix-domain sockets to check the user name of the server process using requirepeer (Peter Eisentraut) PostgreSQL already allowed servers to determine the client user name via Unix-domain sockets. Add PQping() and PQpingParams() to libpq (Bruce Momjian, Tom Lane) The allow detection of the server's status without creating a new session. Build Options Add extensions which allow packaged additions to PostgreSQL (Dimitri Fontaine, Tom Lane) This is controlled by the new CREATE/ALTER/DROP EXTENSION command; this replaces a more manual method of adding features to PostgreSQL. Makefiles Require GNU make 3.80 or newer (Peter Eisentraut) Improved parallel make support (Peter Eisentraut) This allows for faster compiles. Also, make Windows On Windows, allow pg_ctl to register the service as auto-start or start-on-demand (Quan Zongliang) Add support for collecting crash dumps on Windows (Craig Ringer, Magnus Hagander) minidumps can now be generated by non-debug Windows binaries and analyzed by standard debugging tools. Enable building with the Mingw64 compiler (Andrew Dunstan) This allows building 64-bit Windows binaries even on non-Windows platforms with cross-compiling. Source Code Add latches to the source code to wait for events (Heikki Linnakangas) Centralize data modification permissions-checking logic (KaiGai Kohei) Add missing get_{object}_oid() functions, for consistency (Robert Haas) Improve ability to use C++ compilers for backend compiles by removing conflicting keywords (Tom Lane) Add support for DragonFly BSD (Rumko) Expose quote_literal_cstr() for backend use (Robert Haas) Run regression tests in the default encoding (Peter Eisentraut) Regression tests were previously always run with SQL_ASCII encoding. Add src/tools/git_changelog to replace cvs2cl and pgcvslog (Robert Haas, Tom Lane) Add git-external-diff script to src/tools (Bruce Momjian) This is used to generate context diffs from git. Server Hooks Add source code hooks to check permissions (Robert Haas, Stephen Frost) Add post-object-creation function hooks for use by security frameworks (KaiGai Kohei) Add a client authentication hook (KaiGai Kohei) Contrib Modify /contrib modules and stored procedure languages to install via the new extension mechanism (Tom Lane, Dimitri Fontaine) This replaces a more manual method of installation. Add contrib/file_fdw foreign-data wrapper for reading files via COPY (Shigeru Hanada) This adds foreign table support for flat-file. Add nearest-neighbor support to contrib/pg_trgm and contrib/btree_gist (Teodor Sigaev) Add contrib/btree_gist support for searching on not equals (Jeff Davis) Allow contrib/fuzzystrmatch's levenshtein() function handle multi-byte characters (Alexander Korotkov) Add ssl_cipher() and ssl_version() functions to contrib/sslinfo (Robert Haas) Fix contrib/intarray and contrib/hstore to give consistent results with indexed empty arrays (Tom Lane) Previously an empty-array query that used an index might return different results from one that used a sequential scan. In contrib/xml2, remove arbitrary limit on the number of parameter=value pairs that can be handled by xslt_process() (Pavel Stehule) The previous limit was 20. Security Add contrib/sepgsql to interface permission checks with SE-Linux (KaiGai Kohei) This uses the new SECURITY LABEL facility. Add contrib module auth_delay (KaiGai Kohei) This causes the server to pause before returning authentication failure; it is designed to make brute force password attacks more difficult. Add dummy_seclabel contrib module (KaiGai Kohei) This is used for permission regression testing. Performance Add support for LIKE and ILIKE index searches to contrib/pg_trgm (Alexander Korotkov) Add levenshtein_less_equal() function to contrib/fuzzystrmatch, which is optimized for small distances (Alexander Korotkov) Improve performance of index lookups on contrib/seg columns (Alexander Korotkov) **Confirm this does not affect pg_upgrade Improve performance of pg_upgrade for databases with many relations (Bruce Momjian) Add flag to contrib/pgbench to report per-statement latencies (Florian Pflug) Fsync Testing Move src/tools/test_fsync to contrib/pg_test_fsync (Bruce Momjian, Tom Lane) Add O_DIRECT support to contrib/pg_test_fsync (Bruce Momjian) This matches the use of O_DIRECT by wal_sync_method. Add new tests to contrib/pg_test_fsync (Bruce Momjian) Documentation Extensive ECPG documentation improvements (Satoshi Nagayasu) Add documentation for exit_on_error (Robert Haas) This parameter causes sessions to exit on any error. Add documentation for pg_options_to_table() (Josh Berkus) This parameter shows table storage options. Document that it is possible to access all composite fields using (compositeval).* syntax (Peter Eisentraut) **Is this syntax new in 9.1? Document that translate() removes characters in from that don't have a corresponding to character (Josh Kupershmidt) Merge docs for CREATE CONSTRAINT TRIGGER and CREATE TRIGGER (Alvaro Herrera) Centralize permission and upgrade documentation (Bruce Momjian) Add kernel tuning documentation for Solaris 10 (Josh Berkus) Previously only Solaris 9 kernel tuning was documented. Release 9.1alpha4 Overview 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. 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. 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. These notes are cumulative over all alpha releases of the current development cycle. Items that are new in the latest alpha release are emphasized. Migration 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. Testing 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 the testing information page. Changes Replication and Recovery Support named restore points 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. Add new recovery.conf parameter, pause_at_recovery_target, which defaults to on This is a behavior change from previous releases, which entered normal running upon reaching the recovery target. Add pg_is_xlog_replay_paused, pg_xlog_replay_pause, and pg_xlog_replay_resume functions Allow standby servers to send information on running transactions back to the master When enabled, this prevents most recovery conflicts on the slave, but may cause MVCC bloat on the master. Support streaming base backups A new client, pg_basebackup, can be used to perform a streaming base backup. Synchronous replication When enabled, transaction commit will wait for WAL records to be replicated before informing the client that a transaction has successfully committed. When recovery_target_timeline='latest', periodically rescan the archive for new timelines SQL Features 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 Make TRUNCATE ... RESTART IDENTITY restart sequences transactionally 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. Prevent invoking I/O conversion casts via functional/attribute notation This was found to be confusing in some cases. The functionality is still available via cast syntax. Add ALTER TYPE ... ADD/DROP/ALTER/RENAME ATTRIBUTE Support triggers on views 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. Allow WITH clauses to be attached to INSERT, UPDATE, DELETE statements Allow INSERT/UPDATE/DELETE to be used inside a WITH clause Allow new values to be added to an existing enum type Recognize functional dependency on primary keys 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. Add CREATE TABLE IF NOT EXISTS Allow a table's row type to be cast to the table's supertype if it's a type table This is analagous to the existing facility that allows casting a row type to a supertable's row type. Make foreign data wrappers functional, and support FOREIGN TABLEs 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. Allow a unique or primary key constraint to be created using an existing index Implement Serializable Snapshot Isolation, in order to provide a more robust serializable transaction mode 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. Allow foreign key constraints to be added as initially NOT VALID, and validated later Allow multiple collations to be used within a single database Support extensions, which provide a cleaner method for installing and upgrading add-on modules, such as those in contrib Teach ALTER TABLE ... SET DATA TYPE to avoid a table write in some cases where it isn't necessary Add ENCODING option to COPY TO/FROM Allow binary I/O of type "void" Rearrange snapshot handlling to make rule expansion more consistent 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. Performance Optimize the commit_siblings configuration parameter KNN GiST, otherwise known as order-by-operator support for GiST This can be used to optimize nearest-neighbor searches. Improve process shutdown speed Speed up conversion of signed integers to C strings Support MergeAppend plans, to allow sorted output from append relations 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. Support unlogged tables 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. Hash joins now support right and full outer joins 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. Reduce the memory requirement for large ispell dictionaries Teach CLUSTER to use seqscan-and-sort when it's faster than indexscan Improve GIN indexscan cost estimation Fix GIN to support null keys, empty and null items, and full index scans Teach GIN to combine duplicate keys even across different quals Performance improvements in pg_upgrade for uses with many tables Reduce lock levels of CREATE TRIGGER and some ALTER TABLE, CREATE RULE actions Add some knowledge about prefix matches to tsmatchsel() Replace the naive HYPOT() macro with a standards-conformant hypotenuse function Avoid unnecessary detoast when comparing unequal-length text or bytea values for equality or inequality Try to compact the background writer's fsync queue when it overflows, instead of doing an fsync per block written Server Settings Change the default value of standard_conforming_strings to on This is a significant incompatibility with previous releases, because it may break unwary applications in security-critical ways. Add log_file_mode parameter This allows control of the file permissions set on log files created by the syslogger process. Add restart_after_crash parameter 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. Teach replication connections to respect the value of log_connections Previously, they were always logged. Log restartpoints in the same fashion as checkpoints Previously, less information was logged for restartpoints. By default, set wal_buffers to a reasonable value, based on the setting for shared_buffers Administration and Monitoring Instrument checkpoint sync calls Use the same lexer for recovery.conf that has been used for postgresql.conf (Dimitri Fontaine) Among other things, this allows values in recovery.conf to be unquoted. Add column buffers_backend_fsync to pg_stat_bgwriter Add monitoring function pg_last_xact_replay_timestamp() Allow pg_ctl to register the service in either AUTO or DEMAND start type Support host names and host key word all in pg_hba.conf Make EXPLAIN show the function call expression of a FunctionScan plan node, but only in VERBOSE mode Make EXPLAIN print PARAM_EXEC Params as the referenced expressions, rather than just $N Add vacuum and analyze counters to pg_stat_*_tables views Add stats functions and views to provide access to a transaction's own statistics counts Implement remaining fields of information_schema.sequences view Add a "conflicts" column to pg_stat_database New system view pg_stat_database_conflicts New system view pg_stat_replication This view shows which replication slaves are connected to the master, and reports their status and replication progress. 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 This avoids pinning down an autovacuum worker. The next autovacuum cycle will try again. Track time of last statistics reset on databases and bgwriter Security Add SECURITY LABEL command This is intended as infrastructure to support integration with label-based mandatory access control systems such as SE-Linux. Add server authentication over Unix-domain sockets This adds a libpq connection parameter requirepeer that specifies the user name that the server process is expected to run under. Add REPLICATION privilege for ROLEs This makes it possible for replication to be performed by a non-superuser account. Built-in Functions Add pg_read_binary_file() and whole-file-at-once versions of pg_read_file() Add new function format(), for sprintf-like string formatting Add pg_describe_object() function to obtain textual descriptions of objects as stored in pg_depend Accept public as a pseudo-role name in has_table_privilege() and friends to see if a particular privilege has been granted to PUBLIC Add string functions: concat(), concat_ws(), left(), right(), and reverse() Add three-parameter forms of array_to_string and string_to_array Add XMLEXISTS function Add xpath_exists() function This is equivalent to XMLEXISTS except that it offers support for namespace mapping. Add xml_is_well_formed, xml_is_well_formed_document, xml_is_well_formed_content functions to the core XML code These supersede a version previously offered by contrib/xml2. Change pg_last_xlog_receive_location not to move backwards Data Types Allow numeric to use a more compact, 2-byte header in many cases Add support for dividing money by money (yielding a float8 result) and for casting between money and numeric Server Tools Add options to force quoting of all identifiers 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. Add a directory output format to pg_dump <application>psql</> Add S option to \dn command in psql System schemas are now hidden by default by \dn. Add \conninfo command to psql, to show current connection info Extend 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 To avoid assumptions about what switch the user's editor takes for this purpose, there is a new psql variable EDITOR_LINENUMBER_SWITCH with (at present) no default value. Add a \sf (show function) command to psql, for those times when you need to look at a function but don't wish to fire up an editor Make psql distinguish between unique indices and unique constraints in \d printout Add a \dL command to psql, to list procedural languages Allow psql to automatically deduce the client encoding from the locale libpq Add PQlibVersion() function When reporting the server as not responding, if the hostname was supplied, also print the IP address This allows IPv4 and IPv6 failures to be distinguished. Also useful when a hostname resolves to multiple IP addresses. 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 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. ecpg Allow ecpg to accept dynamic cursor names even in WHERE CURRENT OF clauses Procedural Languages PL/pgSQL 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 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. Remove ancient PL/pgSQL line numbering hack PL/pgSQL used to count the second line of the function body as 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. PL/Perl Allow generic record arguments to PL/Perl functions Convert PostgreSQL arrays passed to PL/perl functions to Perl arrays PL/Python Fix an error when a set-returning function fails halfway through Make plpy.Fatal() raise FATAL, rather than ERROR Skip dropped attributes when converting Python objects to tuples Improve the handling of exceptions 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. Improve error reporting 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. Check PL/Python functions for syntax errors at creation time Previously, even gross syntax errors would not be detected until the function was executed. Allow Python try/catch blocks to catch exceptions arising from SPI calls Invalidate PL/python functions with composite type arguments when the type changes Add quoting functions plpy.quote_ident, plpy.quote_literal, and plpy.quote_nullable Support table functions Add a plpy.subtransaction() context manager Assorted code cleanup 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). Additional Supplied Modules New module contrib/auth_delay New module contrib/sepgsql, an SE-Linux integration for PostgreSQL Updates to contrib/isn ISBN tables Add the ability to compute per-statement latencies (ie, average execution times) to pgbench Teach levenshtein() about multi-byte characters Add btree_gist support for searching on not equals Add ssl_cipher() and ssl_version() functions to contrib/sslinfo Remove the arbitrary (and undocumented) limit on the number of parameter=value pairs that can be handled by xslt_process() New module contrib/pg_test_fsync, replacing src/tools/test_fsync In contrib/pageinspect, fix the heap_page_item to return infomasks as 32 bit values In contrib/btree_gist, support KNN GiST searches In contrib/pg_trgm, support LIKE, ILIKE, and KNN GiST searches Several improvements to contrib/intarray 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. 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. Source Code, Build Options Rewrite the GiST insertion logic so that the post-recovery cleanup stage to finish incomplete inserts or splits is not needed anymore Add support for collecting minidump-style crash dumps on Windows Replace pg_class.relistemp column with relpersistence This is for upcoming work on unlogged and global temporary tables. GNU make 3.80 or newer is now required Improved support for parallel make, make -k, and make -q Include the backend ID in the relpath of temporary relations 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. Rewrite COMMENT ON object code for better modularity, and add necessary locking Add a hook in ExecCheckRTPerms() for eventual use by external security-checking modules Standardize names and calling conventions of get_whatever_oid functions 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 Make details of the Numeric representation private to numeric.c Suppress some compiler warnings from clang Allow make check in PL directories Add a make check-world target PGXS support for contrib/hstore