<!-- doc/src/sgml/release-9.4.sgml --> <!-- See header comment in release.sgml about typical markup --> <sect1 id="release-9-4"> <title>Release 9.4</title> <note> <title>Release Date</title> <simpara>2014-??-??</simpara> <simpara>Current as of 2014-08-17</simpara> </note> <sect2> <title>Overview</title> <para> Major enhancements in <productname>PostgreSQL</> 9.4 include: </para> <!-- This list duplicates items below, but without authors or details--> <itemizedlist> <listitem> <para> Allow <link linkend="rules-materializedviews">materialized views</> to be refreshed without blocking reads </para> </listitem> <listitem> <para> Add support for <link linkend="logicaldecoding">logical decoding</> of WAL data, to allow database changes to be streamed out in a customizable format </para> </listitem> <listitem> <para> Allow <link linkend="bgworker">background worker processes</> to be dynamically registered, started and terminated </para> </listitem> <listitem> <para> Add <link linkend="datatype-json"><type>jsonb</></link>, a more capable and efficient data type for for storing <acronym>JSON</> data </para> </listitem> <listitem> <para> Add new <acronym>SQL</> command <xref linkend="SQL-ALTERSYSTEM"> for updating <filename>postgresql.conf</> configuration file entries </para> </listitem> <listitem> <para> Reduce lock strength for some <xref linkend="SQL-ALTERTABLE"> commands </para> </listitem> </itemizedlist> <para> The above items are explained in more detail in the sections below. </para> </sect2> <sect2> <title>Migration to Version 9.4</title> <para> A dump/restore using <xref linkend="app-pg-dumpall">, or use of <xref linkend="pgupgrade">, is required for those wishing to migrate data from any previous release. </para> <para> Version 9.4 contains a number of changes that may affect compatibility with previous releases. Observe the following incompatibilities: </para> <itemizedlist> <listitem> <para> Tighten checks for multidimensional <link linkend="arrays">array</link> input (Bruce Momjian) </para> <para> Previously, an input array string that started with a single-element array dimension could later contain multidimensional segments, e.g. <literal>'{{1}, {2,3}}'::int[]</>. </para> </listitem> <listitem> <para> Unicode escapes in <link linkend="datatype-json"><type>JSON</type></link> text values are no longer rendered with the backslash escaped (Andrew Dunstan) </para> <para> Previously, all backslashes in text values being formed into JSON were escaped. Now a backslash followed by <literal>u</> and four hexadecimal digits is not escaped, as this is a legal sequence in a JSON string value, and escaping the backslash led to some perverse results. </para> </listitem> <listitem> <para> When converting values of type <type>date</>, <type>timestamp</> or <type>timestamptz</> to <link linkend="datatype-json"><type>JSON</type></link>, render the values in a format compliant with ISO 8601 (Andrew Dunstan) </para> <para> Previously such values were rendered according to the current <xref linkend="guc-datestyle"> setting; but many JSON processors require timestamps to be in ISO 8601 format. If necessary, the previous behavior can be obtained by explicitly casting the datetime value to <type>text</> before passing it to the JSON conversion function. </para> </listitem> <listitem> <para> Cause consecutive whitespace in <link linkend="functions-formatting-table"><function>to_timestamp()</></link> and <function>to_date()</> format strings to consume a corresponding number of characters in the input string (whitespace or not), then conditionally consume adjacent whitespace, if not in <literal>FX</> mode (Jeevan Chalke) </para> <para> Previously, consecutive whitespace characters in a non-<literal>FX</> format string behaved like a single whitespace character and consumed all adjacent whitespace in the input string. For example, previously a format string of three spaces would consume only the first space in <literal>' 12'</>, but it will now consume all three characters. </para> </listitem> <listitem> <para> Fix <link linkend="textsearch-functions-table"><function>ts_rank_cd()</></link> to ignore stripped lexemes (Alex Hill) </para> <para> Previously, stripped lexemes were treated as if they had a default location, producing a rank of dubious usefulness. </para> </listitem> <listitem> <para> For functions declared to take <link linkend="xfunc-sql-variadic-functions"><literal>VARIADIC "any"</></link>, an actual parameter marked as <literal>VARIADIC</> must be of a determinable array type (Pavel Stehule) </para> <para> Such parameters can no longer be written as an undecorated string literal or <literal>NULL</>; a cast to an appropriate array data type will now be required. Note that this does not affect parameters not marked <literal>VARIADIC</>. </para> </listitem> <listitem> <para> <xref linkend="sql-discard"> now also discards sequence-related state (Fabrízio de Royes Mello, Robert Haas) </para> </listitem> <listitem> <para> Writable foreign data wrappers must return all columns when the foreign table has an <literal>AFTER ROW</> trigger (Noah Misch) </para> <para> Previously, foreign tables never had triggers, and the <literal>RETURNING</> clause alone dictated the columns required. </para> </listitem> <listitem> <para> Rename <link linkend="SQL-EXPLAIN"><command>EXPLAIN ANALYZE</></link>'s <quote>total runtime</quote> output to <quote>execution time</quote> (Tom Lane) </para> <para> Now that planning time is also reported, the previous name was confusing. </para> </listitem> <listitem> <para> <link linkend="SQL-SHOW"><command>SHOW TIME ZONE</></link> now outputs simple numeric UTC offsets in <acronym>POSIX</> timezone format (Tom Lane) </para> <para> Previously, such timezone settings were displayed as <link linkend="datatype-interval-output"><type>interval</></link> values. The new output is properly interpreted by <command>SET TIME ZONE</> when passed as a simple string, whereas the old output required special treatment to be re-parsed correctly. </para> </listitem> <listitem> <para> Prevent <link linkend="ddl-constraints-check-constraints"><literal>CHECK</></link> constraints from referencing system columns, except <structfield>tableoid</> (Amit Kapila) </para> <para> Previously such check constraints were allowed, but they would often cause errors during restores. </para> </listitem> <listitem> <para> Use the last specified <xref linkend="recovery-target"> if multiple values are specified (Heikki Linnakangas) </para> </listitem> <listitem> <para> On Windows, automatically preserve quotes in command strings supplied by the user (Heikki Linnakangas) </para> <para> User commands that did their own quote preservation might need adjustment. This is likely to be an issue for commands used in <xref linkend="guc-archive-command">, <xref linkend="restore-command">, and <link linkend="sql-copy"><command>COPY TO/FROM PROGRAM</></link>. </para> </listitem> <listitem> <para> Remove catalog column <link linkend="catalog-pg-class"><structfield>pg_class.reltoastidxid</></link> (Michael Paquier) </para> </listitem> <listitem> <para> Remove catalog column <link linkend="catalog-pg-rewrite"><structfield>pg_rewrite.ev_attr</></link> (Kevin Grittner) </para> <para> Per-column rules have not been supported since <application>PostgreSQL</> 7.3. </para> </listitem> <listitem> <para> Remove native support for <application>Kerberos</> authentication (<option>--with-krb5</>, etc) (Magnus Hagander) </para> <para> The supported way to use <application>Kerberos</> authentication is with <acronym>GSSAPI</>. The native code has been deprecated since <productname>PostgreSQL</> 8.3. </para> </listitem> <listitem> <para> In <application>PL/Python</>, handle domains over arrays like the underlying array type (Rodolfo Campero) </para> <para> Previously such values were treated as strings. </para> </listitem> <listitem> <para> Make libpq's <link linkend="libpq-pqconnectdbparams"><function>PQconnectdbParams()</></link> and <link linkend="libpq-pqpingparams"><function>PQpingParams()</></link> functions process zero-length strings as defaults (Adrian Vondendriesch) </para> <para> Previously, these functions treated zero-length string values as selecting the default in only some cases. </para> </listitem> <listitem> <para> Change empty arrays returned by the <xref linkend="intarray"> module to be zero-dimensional arrays (Bruce Momjian) </para> <para> Previously, empty arrays were returned as zero-length one-dimensional arrays, whose text representation looked the same as zero-dimensional arrays (<literal>{}</>), but they acted differently in array operations. <application>intarray</>'s behavior in this area now matches the built-in array operators. </para> </listitem> <listitem> <para> <xref linkend="pgupgrade"> now uses <option>-U</> or <option>--username</> to specify the user name (Bruce Momjian) </para> <para> Previously this option was spelled <option>-u</> or <option>--user</>, but that was inconsistent with other tools. </para> </listitem> </itemizedlist> </sect2> <sect2> <title>Changes</title> <para> Below you will find a detailed account of the changes between <productname>PostgreSQL</productname> 9.4 and the previous major release. </para> <sect3> <title>Server</title> <itemizedlist> <listitem> <para> Allow <link linkend="bgworker">background worker processes</link> to be dynamically registered, started and terminated (Robert Haas) </para> <para> The <filename>contrib/worker_spi</> module shows an example of use of this feature. </para> </listitem> <listitem> <para> Allow dynamic allocation of shared memory segments (Robert Haas, Amit Kapila) </para> <para> This feature is illustrated in <xref linkend="test-shm-mq">. </para> </listitem> <listitem> <para> During crash recovery or immediate shutdown, send uncatchable termination signals (<systemitem>SIGKILL</>) to child processes that do not shut down promptly (MauMau, Álvaro Herrera) </para> <para> This reduces the likelihood of leaving orphaned child processes behind after <xref linkend="app-postmaster"> shutdown, as well as ensuring that crash recovery can proceed if some child processes have become <quote>stuck</>. </para> </listitem> <listitem> <para> Improve randomness of the database system identifier (Tom Lane) </para> </listitem> <listitem> <para> Make <xref linkend="SQL-VACUUM"> properly report dead but not-yet-removable rows to the statistics collector (Hari Babu) </para> <para> Previously these were reported as live rows. </para> </listitem> </itemizedlist> <sect4> <title>Indexes</title> <itemizedlist> <listitem> <para> Reduce <link linkend="GIN"><acronym>GIN</></link> index size (Alexander Korotkov, Heikki Linnakangas) </para> <para> Indexes upgraded via <xref linkend="pgupgrade"> will work fine but will still be in the old, larger <acronym>GIN</> format. Use <xref linkend="SQL-REINDEX"> to recreate such an index in the new format. </para> </listitem> <listitem> <para> Improve speed of multi-key <link linkend="GIN"><acronym>GIN</></link> lookups (Alexander Korotkov, Heikki Linnakangas) </para> </listitem> <listitem> <para> Add <link linkend="GiST"><acronym>GiST</></link> index support for <link linkend="datatype-inet"><type>inet</></link> and <link linkend="datatype-cidr"><type>cidr</></link> data types (Emre Hasegeli) </para> <para> Such indexes improve <link linkend="cidr-inet-operators-table">subnet and supernet</link> lookups and ordering comparisons. </para> </listitem> <listitem> <para> Fix rare race condition in B-tree page deletion (Heikki Linnakangas) </para> </listitem> <listitem> <para> Make the handling of interrupted B-tree page splits more robust (Heikki Linnakangas) </para> </listitem> </itemizedlist> </sect4> <sect4> <title>General Performance</title> <itemizedlist> <listitem> <para> Allow multiple backends to insert into <link linkend="wal"><acronym>WAL</></link> buffers concurrently (Heikki Linnakangas) </para> <para> This improves parallel write performance. </para> </listitem> <listitem> <para> Conditionally write only the modified portion of updated rows to <link linkend="wal"><acronym>WAL</></link> (Amit Kapila) </para> </listitem> <listitem> <para> Improve performance of aggregate functions used as <link linkend="syntax-window-functions">window functions</link> (David Rowley, Florian Pflug, Tom Lane) </para> </listitem> <listitem> <para> Improve speed of aggregates that use <link linkend="datatype-numeric"><type>numeric</></link> state values (Hadi Moshayedi) </para> </listitem> <listitem> <para> Attempt to <link linkend="vacuum-for-wraparound">freeze</link> tuples when tables are rewritten with <xref linkend="SQL-CLUSTER"> or <link linkend="SQL-VACUUM"><command>VACUUM FULL</></link> (Robert Haas, Andres Freund) </para> <para> This can avoid the need to freeze the tuples in the future. </para> </listitem> <listitem> <para> Improve speed of <xref linkend="SQL-COPY"> with <literal>DEFAULT</> <link linkend="functions-sequence-table"><function>nextval()</></link> columns (Simon Riggs) </para> </listitem> <listitem> <para> Improve speed of accessing many different <link linkend="SQL-CREATESEQUENCE">sequences</link> in the same session (David Rowley) </para> </listitem> <listitem> <para> Raise hard limit on the number of tuples held in memory during sorting and B-tree index builds (Noah Misch) </para> </listitem> <listitem> <para> Reduce memory allocated by <application>PL/pgSQL</> <xref linkend="SQL-DO"> blocks (Tom Lane) </para> </listitem> <listitem> <para> Make the planner more aggressive in extracting restriction clauses from mixed <literal>AND</>/<literal>OR</> clauses (Tom Lane) </para> </listitem> <listitem> <para> Disallow pushing volatile <literal>WHERE</> clauses down into <literal>DISTINCT</> subqueries (Tom Lane) </para> <para> Pushing down a <literal>WHERE</> clause can produce a more efficient plan overall, but at the cost of evaluating the clause more often than is implied by the text of the query; so don't do it if the clause contains any volatile functions. </para> </listitem> <listitem> <para> Auto-resize the catalog caches (Heikki Linnakangas) </para> <para> This reduces memory consumption for sessions accessing only a few tables, and improves performance for sessions accessing many tables. </para> </listitem> </itemizedlist> </sect4> <sect4> <title>Monitoring</title> <itemizedlist> <listitem> <para> Add <xref linkend="pg-stat-archiver-view"> system view to report <link linkend="wal"><acronym>WAL</></link> archiver activity (Gabriele Bartolini) </para> </listitem> <listitem> <para> Add <structfield>n_mod_since_analyze</> columns to <xref linkend="pg-stat-all-tables-view"> and related system views (Mark Kirkwood) </para> <para> These columns expose the system's estimate of the number of changed tuples since the table's last <xref linkend="sql-analyze">. This estimate drives decisions about when to auto-analyze. </para> </listitem> <listitem> <para> Add <structfield>backend_xid</> and <structfield>backend_xmin</> columns to the system view <xref linkend="pg-stat-activity-view">, and a <structfield>backend_xmin</> column to <xref linkend="pg-stat-replication-view"> (Christian Kruse) </para> </listitem> </itemizedlist> </sect4> <sect4> <title><acronym>SSL</></title> <itemizedlist> <listitem> <para> Add support for <acronym>SSL</> <acronym>ECDH</> key exchange (Marko Kreen) </para> <para> This allows use of Elliptic Curve keys for server authentication. Such keys are faster and have better security than <acronym>RSA</> keys. The new configuration parameter <xref linkend="guc-ssl-ecdh-curve"> controls which curve is used for <acronym>ECDH</>. </para> </listitem> <listitem> <para> Improve the default <xref linkend="guc-ssl-ciphers"> setting (Marko Kreen) </para> </listitem> <listitem> <para> By default, the server not the client now controls the preference order of <acronym>SSL</> ciphers (Marko Kreen) </para> <para> Previously, the order specified by <xref linkend="guc-ssl-ciphers"> was usually ignored in favor of client-side defaults, which are not configurable in most <productname>PostgreSQL</> clients. If desired, the old behavior can be restored via the new configuration parameter <xref linkend="guc-ssl-prefer-server-ciphers">. </para> </listitem> <listitem> <para> Make <xref linkend="guc-log-connections"> show <acronym>SSL</> encryption information (Andreas Kunert) </para> </listitem> <listitem> <para> Improve <acronym>SSL</> renegotiation handling (Álvaro Herrera) </para> </listitem> </itemizedlist> </sect4> <sect4> <title>Server Settings</title> <itemizedlist> <listitem> <para> Add new <acronym>SQL</> command <xref linkend="SQL-ALTERSYSTEM"> for updating <filename>postgresql.conf</> configuration file entries (Amit Kapila) </para> <para> Previously such settings could only be changed by manually editing <filename>postgresql.conf</>. </para> </listitem> <listitem> <para> Add <xref linkend="guc-autovacuum-work-mem"> configuration parameter to control the amount of memory used by autovacuum workers (Peter Geoghegan) </para> </listitem> <listitem> <para> Add <xref linkend="guc-huge-pages"> parameter to allow using huge memory pages on Linux (Christian Kruse, Richard Poole, Abhijit Menon-Sen) </para> <para> This can improve performance on large-memory systems. </para> </listitem> <listitem> <para> Add <xref linkend="guc-max-worker-processes"> parameter to limit the number of background workers (Robert Haas) </para> <para> This is helpful in configuring a standby server to have the required number of worker processes (the same as the primary). </para> </listitem> <listitem> <para> Add superuser-only <xref linkend="guc-session-preload-libraries"> parameter to load libraries at session start (Peter Eisentraut) </para> <para> In contrast to <xref linkend="guc-local-preload-libraries">, this parameter can load any shared library, not just those in the <filename>$libdir/plugins</> directory. </para> </listitem> <listitem> <para> Add <xref linkend="guc-wal-log-hints"> parameter to enable WAL logging of hint-bit changes (Sawada Masahiko) </para> <para> Hint bit changes are not normally logged, except when checksums are enabled. This is useful for external tools like <application>pg_rewind</>. </para> </listitem> <listitem> <para> Increase the default settings of <xref linkend="guc-work-mem"> and <xref linkend="guc-maintenance-work-mem"> by four times (Bruce Momjian) </para> <para> The new defaults are 4MB and 64MB respectively. </para> </listitem> <listitem> <para> Increase the default setting of <xref linkend="guc-effective-cache-size"> to 4GB (Bruce Momjian, Tom Lane) </para> </listitem> <listitem> <para> Allow <function>printf</function>-style space padding to be specified in <xref linkend="guc-log-line-prefix"> (David Rowley) </para> </listitem> <listitem> <para> Allow terabyte units (<literal>TB</>) to be used when specifying configuration variable values (Simon Riggs) </para> </listitem> <listitem> <para> Show <acronym>PID</>s of lock holders and waiters and improve information about relations in <xref linkend="guc-log-lock-waits"> log messages (Christian Kruse) </para> </listitem> <listitem> <para> Reduce server logging level when loading shared libraries (Peter Geoghegan) </para> <para> The previous level was <literal>LOG</>, which was too verbose for per-session libraries. </para> </listitem> <listitem> <para> On Windows, make <literal>SQL_ASCII</>-encoded databases and server processes (e.g., <xref linkend="app-postmaster">) emit messages in the character encoding of the server's Windows user locale (Alexander Law, Noah Misch) </para> <para> Previously these messages were output in the Windows <acronym>ANSI</> code page. </para> </listitem> </itemizedlist> </sect4> </sect3> <sect3> <title>Replication and Recovery</title> <itemizedlist> <listitem> <para> Add <link linkend="streaming-replication-slots">replication slots</link> to coordinate activity on streaming standbys with the node they are streaming from (Andres Freund, Robert Haas) </para> <para> Replication slots allow preservation of resources like <acronym>WAL</> files on the primary until they are no longer needed by standby servers. </para> </listitem> <listitem> <para> Add <link linkend="recovery-config"><filename>recovery.conf</></link> parameter <xref linkend="recovery-min-apply-delay"> to delay replication (Robert Haas, Fabrízio de Royes Mello, Simon Riggs) </para> <para> Delaying replay on standby servers can be useful for recovering from user errors. </para> </listitem> <listitem> <para> Add <xref linkend="recovery-target"> option <option>immediate</> to stop <link linkend="wal"><acronym>WAL</></link> recovery as soon as a consistent state is reached (MauMau, Heikki Linnakangas) </para> </listitem> <listitem> <para> Improve recovery target processing (Heikki Linnakangas) </para> <para> The timestamp reported by <link linkend="functions-recovery-info-table"><function>pg_last_xact_replay_timestamp()</></link> now reflects already-committed records, not transactions about to be committed. Recovering to a restore point now replays the restore point, rather than stopping just before the restore point. </para> </listitem> <listitem> <para> <link linkend="functions-admin-backup-table"><function>pg_switch_xlog()</></link> now clears any unused trailing space in the old <acronym>WAL</> file (Heikki Linnakangas) </para> <para> This improves the compression ratio for <acronym>WAL</> files. </para> </listitem> <listitem> <para> Report failure return codes from <link linkend="archive-recovery-settings">external recovery commands</> (Peter Eisentraut) </para> </listitem> <listitem> <para> Reduce spinlock contention during <acronym>WAL</> replay (Heikki Linnakangas) </para> </listitem> <listitem> <para> Write <acronym>WAL</> records of running transactions more frequently (Andres Freund) </para> <para> This allows standby servers to start faster and clean up resources more aggressively. </para> </listitem> </itemizedlist> <sect4> <title><link linkend="logicaldecoding">Logical Decoding</></title> <para> Logical decoding allows database changes to be streamed in a configurable format. The data is read from the <link linkend="wal"><acronym>WAL</></link> and transformed into the desired target format. To implement this feature, the following changes were made: </para> <itemizedlist> <listitem> <para> Add support for <link linkend="logicaldecoding">logical decoding</> of WAL data, to allow database changes to be streamed out in a customizable format (Andres Freund) </para> </listitem> <listitem> <para> Add new <xref linkend="guc-wal-level"> setting <option>logical</> to enable logical change-set encoding in <acronym>WAL</> (Andres Freund) </para> </listitem> <listitem> <para> Add table-level parameter <link linkend="catalog-pg-class"><literal>REPLICA IDENTITY</></link> to control logical replication (Andres Freund) </para> </listitem> <listitem> <para> Add relation option <link linkend="SQL-CREATETABLE-storage-parameters"><option>user_catalog_table</></link> to identify user-created tables involved in logical change-set encoding (Andres Freund) </para> </listitem> <listitem> <para> Add <xref linkend="app-pgrecvlogical"> application to receive logical-decoding data (Andres Freund) </para> </listitem> <listitem> <para> Add <xref linkend="test-decoding"> module to illustrate logical decoding at the <acronym>SQL</> level (Andres Freund) </para> </listitem> </itemizedlist> </sect4> </sect3> <sect3> <title>Queries</title> <itemizedlist> <listitem> <para> Add <link linkend="queries-tablefunctions"><literal>WITH ORDINALITY</></link> syntax to number rows returned from set-returning functions in the <literal>FROM</> clause (Andrew Gierth, David Fetter) </para> <para> This is particularly useful for functions like <function>unnest()</>. </para> </listitem> <listitem> <para> Add <link linkend="queries-tablefunctions"><literal>ROWS FROM()</></link> syntax to allow horizontal concatenation of set-returning functions in the <literal>FROM</> clause (Andrew Gierth) </para> </listitem> <listitem> <para> Allow <xref linkend="SQL-SELECT"> to have an empty target list (Tom Lane) </para> <para> This was added so that views that select from a table with zero columns can be dumped and restored correctly. </para> </listitem> </itemizedlist> </sect3> <sect3> <title>Utility Commands</title> <itemizedlist> <listitem> <para> Add <link linkend="SQL-DISCARD"><command>DISCARD SEQUENCES</></link> command to discard cached sequence-related state (Fabrízio de Royes Mello, Robert Haas) </para> <para> <command>DISCARD ALL</> will now also discard such information. </para> </listitem> <listitem> <para> Add <literal>FORCE NULL</> option to <link linkend="SQL-COPY"><command>COPY FROM</></link>, which causes quoted strings matching the specified null string to be converted to NULLs in <literal>CSV</> mode (Ian Barwick, Michael Paquier) </para> <para> Without this option, only unquoted matching strings will be imported as null values. </para> </listitem> <listitem> <para> Issue warnings for commands used outside of transaction blocks when they can have no effect (Bruce Momjian) </para> <para> New warnings are issued for <command>SET LOCAL</>, <command>SET CONSTRAINTS</>, <command>SET TRANSACTION</> and <command>ABORT</> when used outside a transaction block. </para> </listitem> </itemizedlist> <sect4> <title><xref linkend="SQL-EXPLAIN"></title> <itemizedlist> <listitem> <para> Make <command>EXPLAIN ANALYZE</> show planning time (Andreas Karlsson) </para> </listitem> <listitem> <para> Make <command>EXPLAIN</> show the grouping columns in Agg and Group nodes (Tom Lane) </para> </listitem> <listitem> <para> Make <command>EXPLAIN ANALYZE</> show exact and lossy block counts in bitmap heap scans (Etsuro Fujita) </para> </listitem> </itemizedlist> </sect4> <sect4> <title>Views</title> <itemizedlist> <listitem> <para> Allow <link linkend="rules-materializedviews">materialized views</> to be refreshed without blocking reads (Kevin Grittner) </para> <para> This is done with <link linkend="SQL-REFRESHMATERIALIZEDVIEW"><command>REFRESH MATERIALIZED VIEW CONCURRENTLY</></link>. </para> </listitem> <listitem> <para> Allow views to be <link linkend="SQL-CREATEVIEW-updatable-views">automatically updated</link> even if they contain some non-updatable columns (Dean Rasheed) </para> <para> Previously the presence of non-updatable output columns such as expressions, literals, and function calls prevented automatic updates. Now <command>INSERT</>s, <command>UPDATE</>s and <command>DELETE</>s are supported, provided that they do not attempt to assign new values to any of the non-updatable columns. </para> </listitem> <listitem> <para> Allow control over whether <command>INSERT</>s and <command>UPDATE</>s can add rows to an auto-updatable view that would not appear in the view (Dean Rasheed) </para> <para> This is controlled with the new <xref linkend="SQL-CREATEVIEW"> clause <literal>WITH CHECK OPTION</>. </para> </listitem> <listitem> <para> Allow <link linkend="rules-privileges">security barrier views</> to be automatically updatable (Dean Rasheed) </para> </listitem> </itemizedlist> </sect4> </sect3> <sect3> <title>Object Manipulation</title> <itemizedlist> <listitem> <para> Support triggers on <link linkend="SQL-CREATEFOREIGNTABLE">foreign tables</> (Ronan Dunklau) </para> </listitem> <listitem> <para> Allow moving groups of objects from one tablespace to another using <xref linkend="SQL-ALTERTABLESPACE"> ... <literal>MOVE</> (Stephen Frost) </para> </listitem> <listitem> <para> Allow changing foreign key constraint deferrability via <xref linkend="SQL-ALTERTABLE"> ... <literal>ALTER CONSTRAINT</> (Simon Riggs) </para> </listitem> <listitem> <para> Reduce lock strength for some <xref linkend="SQL-ALTERTABLE"> commands (Simon Riggs, Noah Misch, Robert Haas) </para> <para> Specifically, <literal>VALIDATE CONSTRAINT</>, <literal>CLUSTER ON</>, <literal>SET WITHOUT CLUSTER</>, <literal>ALTER COLUMN SET STATISTICS</>, <literal>ALTER COLUMN</> <literal>SET</> <option>(attribute_option)</>, <literal>ALTER COLUMN RESET</> <option>(attribute_option)</> no longer require <literal>ACCESS EXCLUSIVE</> locks. </para> </listitem> <listitem> <para> Allow tablespace options to be set in <xref linkend="SQL-CREATETABLESPACE"> (Vik Fearing) </para> <para> Formerly these options could only be set via <xref linkend="SQL-ALTERTABLESPACE">. </para> </listitem> <listitem> <para> Allow <xref linkend="SQL-CREATEAGGREGATE"> to define the estimated size of the aggregate's transition state data (Hadi Moshayedi) </para> <para> Proper use of this feature allows the planner to better estimate how much memory will be used by aggregates. </para> </listitem> <listitem> <para> Fix <command>DROP IF EXISTS</> to avoid errors for non-existent objects in more cases (Pavel Stehule, Dean Rasheed) </para> </listitem> <listitem> <para> Improve how system relations are identified (Andres Freund, Robert Haas) </para> <para> Previously, relations once moved into the <literal>pg_catalog</> schema could no longer be modified or dropped. </para> </listitem> </itemizedlist> </sect3> <sect3> <title>Data Types</title> <itemizedlist> <listitem> <para> Fully implement the <link linkend="datatype-line"><type>line</></link> data type (Peter Eisentraut) </para> <para> The line <emphasis>segment</> data type (<link linkend="datatype-lseg"><type>lseg</></link>) has always been fully supported. The previous <type>line</> data type (enabled only via a compile-time option) is not binary or dump-compatible. </para> </listitem> <listitem> <para> Add <link linkend="datatype-pg-lsn"><type>pg_lsn</></link> data type to represent a <acronym>WAL</> log sequence number (<acronym>LSN</>) (Robert Haas, Michael Paquier) </para> </listitem> <listitem> <para> Allow single-point <link linkend="datatype-polygon"><type>polygon</></link>s to be converted to <link linkend="datatype-circle"><type>circle</></link>s (Bruce Momjian) </para> </listitem> <listitem> <para> Allow 5+ digit years for non-<acronym>ISO</> <link linkend="datatype-datetime"><type>timestamp</></link> and <type>date</> strings, where appropriate (Bruce Momjian) </para> </listitem> <listitem> <para> Add checks for overflow/underflow of <link linkend="datatype-datetime"><type>interval</></link> values (Bruce Momjian) </para> </listitem> </itemizedlist> <sect4> <title><link linkend="datatype-json"><acronym>JSON</></link></title> <itemizedlist> <listitem> <para> Add <link linkend="datatype-json"><type>jsonb</></link>, a more capable and efficient data type for for storing <acronym>JSON</> data (Oleg Bartunov, Teodor Sigaev, Alexander Korotkov, Peter Geoghegan, Andrew Dunstan) </para> <para> This new type allows faster access to values in a JSON document and faster and more useful indexing of JSON columns. Scalar values in <type>jsonb</> documents are stored as appropriate scalar SQL types, and the JSON document structure is pre-parsed rather than being stored as text as in the original <type>json</> data type. </para> </listitem> <listitem> <para> Add new JSON functions to allow for the construction of arbitrarily complex JSON trees (Andrew Dunstan, Laurence Rowe) </para> <para> New functions include <link linkend="functions-json-processing-table"><function>json_array_elements_text()</></link>, <function>json_build_array()</>, <function>json_object()</>, <function>json_object_agg()</>, <function>json_to_record()</>, and <function>json_to_recordset()</>. </para> </listitem> <listitem> <para> Add <link linkend="functions-json-processing-table"><function>json_typeof()</></link> to return the data type of a <type>json</> value (Andrew Tipton) </para> </listitem> </itemizedlist> </sect4> </sect3> <sect3> <title>Functions</title> <itemizedlist> <listitem> <para> Add <link linkend="functions-datetime-delay"><function>pg_sleep_for(interval)</></link> and <function>pg_sleep_until(timestamp)</> to specify delays more flexibly (Vik Fearing, Julien Rouhaud) </para> <para> The existing <function>pg_sleep()</> function only supports delays specified in seconds. </para> </listitem> <listitem> <para> Add <link linkend="array-functions-table"><function>cardinality()</></link> function for arrays (Marko Tiikkaja) </para> <para> This returns the total number of elements in the array, or zero for an array with no elements. </para> </listitem> <listitem> <para> Add <acronym>SQL</> functions to allow <link linkend="lo-funcs">large object reads/writes</link> at arbitrary offsets (Pavel Stehule) </para> </listitem> <listitem> <para> Allow <link linkend="array-functions-table"><function>unnest()</></link> to take multiple arguments, which are individually unnested then horizontally concatenated (Andrew Gierth) </para> </listitem> <listitem> <para> Add functions to construct <type>time</>s, <type>date</>s, <type>timestamp</>s, <type>timestamptz</>s, and <type>interval</>s from individual values, rather than strings (Pavel Stehule) </para> <para> These functions' names are prefixed with <literal>make_</>, e.g. <link linkend="functions-datetime-table"><function>make_date()</></link>. </para> </listitem> <listitem> <para> Make <link linkend="functions-formatting-table"><function>to_char()</></link>'s <literal>TZ</> format specifier return a useful value for simple numeric time zone offsets (Tom Lane) </para> <para> Previously, <literal>to_char(CURRENT_TIMESTAMP, 'TZ')</> returned an empty string if the <literal>timezone</> was set to a constant like <literal>-4</>. </para> </listitem> <listitem> <para> Add timezone offset format specifier <literal>OF</> to <link linkend="functions-formatting-table"><function>to_char()</></link> (Bruce Momjian) </para> </listitem> <listitem> <para> Improve the random seed used for <link linkend="functions-math-random-table"><function>random()</></link> (Honza Horak) </para> </listitem> <listitem> <para> Tighten validity checking for Unicode code points in <link linkend="functions-string-other"><function>chr(int)</></link> (Tom Lane) </para> <para> This function now only accepts values that are valid UTF8 characters according to RFC 3629. </para> </listitem> </itemizedlist> <sect4> <title>System Information Functions</title> <itemizedlist> <listitem> <para> Add functions for looking up objects in <structname>pg_class</>, <structname>pg_proc</>, <structname>pg_type</>, and <structname>pg_operator</> that do not generate errors for non-existent objects (Yugo Nagata, Nozomi Anzai, Robert Haas) </para> <para> For example, <link linkend="functions-info-catalog-table"><function>to_regclass()</></link> does a lookup in <structname>pg_class</> similarly to the <type>regclass</> input function, but it returns NULL for a non-existent object instead of failing. </para> </listitem> <listitem> <para> Add function <link linkend="functions-admin-dblocation"><function>pg_filenode_relation()</></link> to allow for more efficient lookup of relation names from filenodes (Andres Freund) </para> </listitem> <listitem> <para> Add <structfield>parameter_default</> column to <link linkend="infoschema-parameters"><structname>information_schema.parameters</></link> view (Peter Eisentraut) </para> </listitem> <listitem> <para> Make <link linkend="infoschema-schemata"><structname>information_schema.schemata</></link> show all accessible schemas (Peter Eisentraut) </para> <para> Previously it only showed schemas owned by the current user. </para> </listitem> </itemizedlist> </sect4> <sect4> <title>Aggregates</title> <itemizedlist> <listitem> <para> Add control over which rows are passed into aggregate functions using the <link linkend="syntax-aggregates"><literal>FILTER</></link> clause (David Fetter) </para> </listitem> <listitem> <para> Support ordered-set (<link linkend="syntax-aggregates"><literal>WITHIN GROUP</></link>) aggregates (Atri Sharma, Andrew Gierth, Tom Lane) </para> </listitem> <listitem> <para> Add aggregates <link linkend="functions-orderedset-table"><function>percentile_cont()</></link>, <function>percentile_disc()</>, <function>mode()</>, <link linkend="functions-hypothetical-table"><function>rank()</></link>, <function>dense_rank()</>, <function>percent_rank()</>, and <function>cume_dist()</> (Atri Sharma, Andrew Gierth) </para> </listitem> <listitem> <para> Support <link linkend="xfunc-sql-variadic-functions"><literal>VARIADIC</></link> aggregate functions (Tom Lane) </para> </listitem> <listitem> <para> Allow polymorphic aggregates to have non-polymorphic state data types (Tom Lane) </para> <para> This allows proper declaration of aggregates like the built-in aggregate <function>array_agg()</> in SQL. </para> </listitem> </itemizedlist> </sect4> </sect3> <sect3> <title>Server-Side Languages</title> <itemizedlist> <listitem> <para> Add event trigger support to <link linkend="plperl">PL/Perl</> and <link linkend="pltcl">PL/Tcl</> (Dimitri Fontaine) </para> </listitem> <listitem> <para> Convert <link linkend="datatype-numeric"><type>numeric</></link> values to <type>decimal</> in <link linkend="plpython">PL/Python</link> (Szymon Guz, Ronan Dunklau) </para> <para> Previously such values were converted to Python <type>float</> values, risking loss of precision. </para> </listitem> </itemizedlist> <sect4> <title><link linkend="plpgsql">PL/pgSQL</link> Server-Side Language</title> <itemizedlist> <listitem> <para> Add ability to store the PL/PgSQL call stack into a variable using <link linkend="plpgsql-get-diagnostics-context"><literal>PG_CONTEXT</></link> (Pavel Stehule, Stephen Frost) </para> </listitem> <listitem> <para> Add option <link linkend="plpgsql-statements-assignment"><option>print_strict_params</></link> to output parameters passed to queries generating <link linkend="plpgsql-statements-sql-onerow"><literal>STRICT</></link> errors (Marko Tiikkaja) </para> </listitem> <listitem> <para> Add variables <link linkend="plpgsql-extra-checks"><varname>plpgsql.extra_warnings</></link> and <varname>plpgsql.extra_errors</> to enable additional PL/pgSQL warnings and errors (Marko Tiikkaja, Petr Jelinek) </para> <para> Currently only shadowed variable errors/warnings are available. </para> </listitem> </itemizedlist> </sect4> </sect3> <sect3> <title><link linkend="libpq"><application>libpq</></link></title> <itemizedlist> <listitem> <para> Add libpq function <link linkend="libpq-pqhostaddr"><function>PQhostaddr()</></link> to return the server's <acronym>IP</> address (Fujii Masao) </para> </listitem> <listitem> <para> Make libpq's <link linkend="libpq-pqconndefaults"><function>PQconndefaults()</></link> function ignore invalid service files (Steve Singer, Bruce Momjian) </para> <para> Previously it returned NULL if an incorrect service file was encountered. </para> </listitem> <listitem> <para> Accept <acronym>TLS</> protocol versions beyond <literal>TLSv1</> in libpq (Marko Kreen) </para> </listitem> </itemizedlist> </sect3> <sect3> <title>Client Applications</title> <itemizedlist> <listitem> <para> Add <xref linkend="APP-CREATEUSER"> option <option>-g</> to specify role membership (Chistopher Browne) </para> </listitem> <listitem> <para> Add <xref linkend="APP-VACUUMDB"> option <option>--analyze-in-stages</> to analyze in stages of increasing granularity (Peter Eisentraut) </para> <para> This allows minimal statistics to be created quickly. </para> </listitem> <listitem> <para> Make <xref linkend="APP-PGRESETXLOG"> with option <option>-n</> output current and potentially changed values (Rajeev Rastogi) </para> </listitem> <listitem> <para> Make <xref linkend="app-initdb"> throw error for incorrect locale settings, rather than silently falling back to a default choice (Tom Lane) </para> </listitem> <listitem> <para> Make <xref linkend="app-pg-ctl"> return exit code <literal>4</> for an inaccessible data directory (Amit Kapila, Bruce Momjian) </para> <para> This behavior more closely matches the Linux Standard Base (<acronym>LSB</>) Core Specification. </para> </listitem> <listitem> <para> On Windows, ensure that a non-absolute <option>-D</> path specification is interpreted relative to <xref linkend="app-pg-ctl">'s current directory (Kumar Rajeev Rastogi) </para> <para> Previously it would be interpreted relative to whichever directory the underlying Windows service was started in. </para> </listitem> <listitem> <para> Allow <function>sizeof()</> in <link linkend="ecpg">ECPG</link> C array definitions (Michael Meskes) </para> </listitem> <listitem> <para> Make <link linkend="ecpg">ECPG</link> properly handle nesting of C-style comments in both C and <acronym>SQL</> text (Michael Meskes) </para> </listitem> </itemizedlist> <sect4> <title><xref linkend="APP-PSQL"></title> <itemizedlist> <listitem> <para> Suppress <quote>No rows</quote> output in <application>psql</> <link linkend="APP-PSQL-meta-commands"><option>expanded</></link> mode when the footer is disabled (Bruce Momjian) </para> </listitem> <listitem> <para> Allow Control-C to abort <application>psql</> when hung at connection startup (Peter Eisentraut) </para> </listitem> </itemizedlist> <sect5> <title><link linkend="APP-PSQL-meta-commands">Backslash Commands</link></title> <itemizedlist> <listitem> <para> Make <application>psql</> <command>\db+</> show tablespace options (Magnus Hagander) </para> </listitem> <listitem> <para> Make <application>psql</> <command>\do+</> display the functions which implement the operators (Marko Tiikkaja) </para> </listitem> <listitem> <para> Make <application>psql</> <command>\d+</> output an <literal>OID</> line only if an <literal>oid</literal> column exists in a table (Bruce Momjian) </para> <para> Previously, the presence or absence of an <literal>oid</literal> column was always reported. </para> </listitem> <listitem> <para> Make <command>\d</> show disabled system triggers (Bruce Momjian) </para> <para> Previously, if you disabled all triggers, only user triggers would show as disabled. </para> </listitem> <listitem> <para> Fix <application>psql</> <command>\copy</> to no longer require a space between <literal>stdin</> and a semicolon (Etsuro Fujita) </para> </listitem> <listitem> <para> Output the row count at the end of <application>psql</> <command>\copy</> just like <xref linkend="SQL-COPY"> (Kumar Rajeev Rastogi) </para> </listitem> <listitem> <para> Fix <application>psql</> <command>\conninfo</> to display the server's <acronym>IP</> address for clients that connect using <literal>hostaddr</> (Fujii Masao) </para> <para> Previously <command>\conninfo</> could not display the server's <acronym>IP</> address in such cases. </para> </listitem> <listitem> <para> Mention the <acronym>SSL</> protocol version in <application>psql</>'s <command>\conninfo</> (Marko Kreen) </para> </listitem> <listitem> <para> Add <application>psql</> tab completion for <command>\pset</> (Pavel Stehule) </para> </listitem> <listitem> <para> Allow <application>psql</> <command>\pset</> with no arguments to show all settings (Gilles Darold) </para> </listitem> <listitem> <para> In <application>psql</>, display the history file name written by <command>\s</> without converting it to an absolute path (Tom Lane) </para> <para> The code previously attempted to convert a relative file name to an absolute path for display, but frequently got it wrong. </para> </listitem> </itemizedlist> </sect5> </sect4> <sect4> <title><xref linkend="APP-PGDUMP"></title> <itemizedlist> <listitem> <para> Allow <xref linkend="APP-PGRESTORE"> options <option>-I</>, <option>-P</>, <option>-T</> and <option>-n</> to be specified multiple times (Heikki Linnakangas) </para> <para> This allows multiple objects to be restored in one operation. </para> </listitem> <listitem> <para> Optionally add <literal>IF EXISTS</> clauses to the <command>DROP</> commands emitted when removing old objects during a restore (Pavel Stehule) </para> <para> This change prevents unnecessary errors when removing old objects. The new <option>--if-exists</> option for <xref linkend="APP-PGDUMP">, <xref linkend="APP-PG-DUMPALL">, and <xref linkend="APP-PGRESTORE"> is only available when <option>--clean</> is also specified. </para> </listitem> </itemizedlist> </sect4> <sect4> <title><xref linkend="app-pgbasebackup"></title> <itemizedlist> <listitem> <para> Add <application>pg_basebackup</> option <option>--xlogdir</> to specify the <filename>pg_xlog</> directory location (Haribabu Kommi) </para> </listitem> <listitem> <para> Allow <application>pg_basebackup</> to relocate tablespaces in the backup copy (Steeve Lennmark) </para> <para> This is particularly useful for using <application>pg_basebackup</> on the same machine as the primary. </para> </listitem> <listitem> <para> Allow network-stream base backups to be throttled (Antonin Houska) </para> <para> This can be controlled with the <application>pg_basebackup</> <option>--max-rate</> parameter. </para> </listitem> </itemizedlist> </sect4> </sect3> <sect3> <title>Source Code</title> <itemizedlist> <listitem> <para> Improve the way tuples are frozen to preserve forensic information (Robert Haas, Andres Freund) </para> <para> This change removes the main objection to freezing tuples as soon as possible. Code that inspects tuple flag bits will need to be modified. </para> </listitem> <listitem> <para> No longer require function prototypes for functions marked with the <link linkend="xfunc-c"><function>PG_FUNCTION_INFO_V1</></link> macro (Peter Eisentraut) </para> <para> This change eliminates the need to write boilerplate prototypes. Note that the <function>PG_FUNCTION_INFO_V1</> macro must appear before the corresponding function definition to avoid compiler warnings. </para> </listitem> <listitem> <para> Remove <varname>SnapshotNow</> and <function>HeapTupleSatisfiesNow()</> (Robert Haas) </para> <para> All existing uses have been switched to more appropriate snapshot types. Catalog scans now use <acronym>MVCC</> snapshots. </para> </listitem> <listitem> <para> Add an <acronym>API</> to allow memory allocations over one gigabyte (Noah Misch) </para> </listitem> <listitem> <para> Add <function>psprintf()</> to simplify memory allocation during string composition (Peter Eisentraut, Tom Lane) </para> </listitem> <listitem> <para> Support <function>printf()</> size modifier <literal>z</> to print <type>size_t</> values (Andres Freund) </para> </listitem> <listitem> <para> Change <acronym>API</> of <function>appendStringInfoVA()</> to better use <function>vsnprintf()</> (David Rowley, Tom Lane) </para> </listitem> <listitem> <para> Allow new types of external toast datums to be created (Andres Freund) </para> </listitem> <listitem> <para> Add single-reader, single-writer, lightweight shared message queue (Robert Haas) </para> </listitem> <listitem> <para> Improve spinlock speed on x86_64 <acronym>CPU</>s (Heikki Linnakangas) </para> </listitem> <listitem> <para> Remove spinlock support for unsupported platforms <productname>SINIX</>, <productname>Sun3</>, and <productname>NS32K</> (Robert Haas) </para> </listitem> <listitem> <para> Remove <acronym>IRIX</> port (Robert Haas) </para> </listitem> <listitem> <para> Reduce the number of semaphores required by <option>--disable-spinlocks</> builds (Robert Haas) </para> </listitem> <listitem> <para> Rewrite <application>duplicate_oids</> Unix shell script in <application>Perl</> (Andrew Dunstan) </para> </listitem> <listitem> <para> Add Test Anything Protocol (<acronym>TAP</>) tests for client programs (Peter Eisentraut) </para> </listitem> <listitem> <para> Add make targets <option>check-tests</> and <option>installcheck-tests</>, which allow selection of individual tests to be run (Andrew Dunstan) </para> </listitem> <listitem> <para> Remove <option>maintainer-check</> makefile rule (Peter Eisentraut) </para> <para> The default build rules now include all the formerly-optional tests. </para> </listitem> <listitem> <para> Improve support for <envar>VPATH</> builds of <acronym>PGXS</> modules (Cédric Villemain, Andrew Dunstan) </para> </listitem> <listitem> <para> Upgrade to Autoconf 2.69 (Peter Eisentraut) </para> </listitem> <listitem> <para> Add a <application>configure</> flag that appends custom text to the <envar>PG_VERSION</> string (Oskari Saarenmaa) </para> <para> This is useful for packagers building custom binaries. </para> </listitem> <listitem> <para> Improve DocBook <acronym>XML</> validity (Peter Eisentraut) </para> </listitem> <listitem> <para> Various minor security and sanity fixes reported by the <productname>Coverity</> scanner (Stephen Frost) </para> </listitem> <listitem> <para> Improve <application>Valgrind</> detection of invalid memory usage (Noah Misch) </para> </listitem> <listitem> <para> Improve sample <application>Emacs</> configuration file <filename>emacs.samples</> (Peter Eisentraut) </para> <para> Also add <filename>.dir-locals.el</> to the top of the source tree. </para> </listitem> <listitem> <para> Allow <application>pgindent</> to accept a command-line list of typedefs (Bruce Momjian) </para> <para> <application>pgindent</> is also now smarter about blank lines around preprocessor conditionals. </para> </listitem> <listitem> <para> Avoid most uses of <command>dlltool</command> in <productname>Cygwin</> and <productname>Mingw</> builds (Marco Atzeri, Hiroshi Inoue) </para> </listitem> <listitem> <para> Support client-only installs in <acronym>MSVC</> (Windows) builds (MauMau) </para> </listitem> </itemizedlist> </sect3> <sect3> <title>Additional Modules</title> <itemizedlist> <listitem> <para> Add <xref linkend="pgprewarm"> extension to preload relation data into the shared buffer cache at server start (Robert Haas) </para> <para> This allows reaching full operating performance more quickly. </para> </listitem> <listitem> <para> Add <acronym>UUID</> random number generator <function>gen_random_uuid()</> to <xref linkend="pgcrypto"> (Oskari Saarenmaa) </para> <para> This allows creation of version 4 <acronym>UUID</>s without requiring installation of <xref linkend="uuid-ossp">. </para> </listitem> <listitem> <para> Allow <xref linkend="uuid-ossp"> to work with the <systemitem>BSD</> or <systemitem>e2fsprogs</> UUID libraries, not only the <systemitem>OSSP</> UUID library (Matteo Beccati) </para> <para> This improves the <application>uuid-ossp</> module's portability since it no longer has to have the increasingly-obsolete OSSP library. The module's name is now rather a misnomer, but we won't change it. </para> </listitem> <listitem> <para> Add option to <xref linkend="auto-explain"> to include trigger execution time (Horiguchi Kyotaro) </para> </listitem> <listitem> <para> Fix <xref linkend="pgstattuple"> to not report rows from uncommitted transactions as dead (Robert Haas) </para> </listitem> <listitem> <para> Make <xref linkend="pgstattuple"> functions use <type>regclass</type>-type arguments (Satoshi Nagayasu) </para> <para> While <type>text</type>-type arguments are still supported, they may be removed in a future major release. </para> </listitem> <listitem> <para> Improve consistency of <xref linkend="pgrowlocks"> output to honor snapshot rules more consistently (Robert Haas) </para> </listitem> <listitem> <para> Improve <xref linkend="pgtrgm">'s choice of trigrams for indexed regular expression searches by discouraging the selection of trigrams containing whitespace (Alexander Korotkov) </para> </listitem> <listitem> <para> Allow <xref linkend="pgxlogdump"> to report a live log stream with <option>--follow</> (Heikki Linnakangas) </para> </listitem> <listitem> <para> Store <xref linkend="cube"> data more compactly (Stas Kelvich) </para> <para> Existing data must be dumped/restored to use the new format. The old format can still be read. </para> </listitem> <listitem> <para> Reduce <xref linkend="vacuumlo"> client-side memory usage by using a cursor (Andrew Dunstan) </para> </listitem> <listitem> <para> Dramatically reduce memory consumption in <xref linkend="pgupgrade"> (Bruce Momjian) </para> </listitem> <listitem> <para> Pass <xref linkend="pgupgrade"> user name (<option>-U</> option) to analyze scripts (Bruce Momjian) </para> </listitem> </itemizedlist> <sect4> <title><xref linkend="pgbench"></title> <itemizedlist> <listitem> <para> Remove line length limit for <application>pgbench</> scripts (Sawada Masahiko) </para> <para> The previous line limit was <envar>BUFSIZ</>. </para> </listitem> <listitem> <para> Add long option names to <application>pgbench</> (Fabien Coelho) </para> </listitem> <listitem> <para> Add <application>pgbench</> option <option>--rate</> to control the transaction rate (Fabien Coelho) </para> </listitem> <listitem> <para> Add <application>pgbench</> option <option>--progress</> to print periodic progress reports (Fabien Coelho) </para> </listitem> </itemizedlist> </sect4> <sect4> <title><xref linkend="pgstatstatements"></title> <itemizedlist> <listitem> <para> Make <application>pg_stat_statements</> use a file, rather than shared memory, for query text storage (Peter Geoghegan) </para> <para> This removes the previous limitation on query text length, and allows a higher number of unique statements to be tracked by default. </para> </listitem> <listitem> <para> Allow reporting of <application>pg_stat_statements</>'s internal query hash identifier (Daniel Farina, Sameer Thakur, Peter Geoghegan) </para> </listitem> <listitem> <para> Add the ability to retrieve all <application>pg_stat_statements</> information except the query text (Peter Geoghegan) </para> <para> This allows monitoring tools to only fetch query text for newly created entries, improving performance for repeated querying of the statistics. </para> </listitem> <listitem> <para> Save the statistics file into <filename>$PGDATA/pg_stat</> at server shutdown, rather than <filename>$PGDATA/global</> (Fujii Masao) </para> </listitem> </itemizedlist> </sect4> </sect3> </sect2> </sect1>