PostgreSQL versions

Assists database designers with creating rules to identify specific operations
Nov 28, 2023
Review
May 25, 2023
Review
Feb 18, 2023
Review
Aug 26, 2022
Review
Review
Aug 30, 2021
Review
Aug 15, 2020
Review
Aug 15, 2020
Review
Jul 3, 2020
Review
Aug 30, 2018
Review
May 19, 2016
Review
Oct 12, 2015
Review
Nov 24, 2015
Review
May 21, 2014
Review
Aug 4, 2014
9.3
Aug 30, 2013
Review
May 22, 2013
Review
9.2
Sep 10, 2012
Review
May 23, 2012
Review
Sep 10, 2014
Oct 4, 2011
9.0
May 6, 2010
8.4
Jul 27, 2010
Apr 23, 2009
Review
Feb 21, 2008
Editorial review
rating
Feb 14, 2008
Editorial review
rating
Jul 25, 2008

What's new

v16.1 [Nov 10, 2023]
This release contains a variety of fixes from 16.0:
- Fix handling of unknown-type arguments in DISTINCT "any" aggregate functions.
- Detect integer overflow while computing new array dimensions.
- Prevent the pg_signal_backend role from signalling background workers and autovacuum processes.
- Prevent de-duplication of btree index entries for interval columns.
- Process date values more sanely in BRIN datetime_minmax_multi_ops indexes.
- Process large timestamp and timestamptz values more sanely in BRIN datetime_minmax_multi_ops indexes.
- Avoid calculation overflows in BRIN interval_minmax_multi_ops indexes with extreme interval values.
- Fix partition step generation and runtime partition pruning for hash-partitioned tables with multiple partition keys.
- Fix inconsistent rechecking of concurrently-updated rows during MERGE.
- Correctly identify the target table in an inherited UPDATE/DELETE/MERGE even when the parent table is excluded by constraints.
- Fix edge case in btree mark/restore processing of ScalarArrayOpExpr clauses.
- Fix intra-query memory leak in Memoize execution.
- Fix intra-query memory leak when a set-returning function repeatedly returns zero rows.
- Don't crash if cursor_to_xmlschema() is applied to a non-data-returning Portal.
- Fix improper sharing of origin filter condition across successive pg_logical_slot_get_changes() calls.
- Throw the intended error if pgrowlocks() is applied to a partitioned table.
- Handle invalid indexes more cleanly in assorted SQL functions.
- Avoid premature memory allocation failure with long inputs to to_tsvector().
- Fix over-allocation of the constructed tsvector in tsvectorrecv().
- Improve checks for corrupt PGLZ compressed data.
- Fix ALTER SUBSCRIPTION so that a commanded change in the run_as_owner option is actually applied.
- Fix bulk table insertion into partitioned tables.
- In COPY FROM, avoid evaluating column default values that will not be needed by the command.
- In COPY FROM, fail cleanly when an unsupported encoding conversion is needed.
- Avoid crash in EXPLAIN if a parameter marked to be displayed by EXPLAIN has a NULL boot-time value.
- Ensure we have a snapshot while dropping ON COMMIT DROP temp tables.
- Avoid improper response to shutdown signals in child processes just forked by system().
- Cope with torn reads of pg_control in frontend programs.
- Avoid torn reads of pg_control in relevant SQL functions.
- Fix “could not find pathkey item to sort” errors occurring while planning aggregate functions with ORDER BY or DISTINCT options.
- Avoid integer overflow when computing size of backend activity string array.
- Fix briefly showing inconsistent progress statistics for ANALYZE on inherited tables.
- Fix the background writer to report any WAL writes it makes to the statistics counters.
- Fix confusion about forced-flush behavior in pgstat_report_wal().
- Fix statistics tracking of temporary-table extensions.
- When track_io_timing is enabled, include the time taken by relation extension operations as write time.
- Track the dependencies of cached CALL statements, and re-plan them when needed.
- Avoid a possible pfree-a-NULL-pointer crash after an error in OpenSSL connection setup.
- Track nesting depth correctly when inspecting RECORD-type Vars from outer query levels.
- Track hash function and negator function dependencies of ScalarArrayOpExpr plan nodes.
- Fix error-handling bug in RECORD type cache management.
Treat out-of-memory failures as fatal while reading WAL.
- Fix possible recovery failure due to trying to allocate memory based on a bogus WAL record length field.
- Fix “could not duplicate handle” error occurring on Windows when min_dynamic_shared_memory is set above zero.
- Fix order of operations in GenericXLogFinish.
- Remove incorrect assertion in PL/Python exception handling.
- Fix pg_dump to dump the new run_as_owner option of subscriptions.
- Fix pg_restore so that selective restores will include both table-level and column-level ACLs for selected tables.
- Add logic to pg_upgrade to check for use of abstime, reltime, and tinterval data types.
- Avoid false “too many client connections” errors in pgbench on Windows.
- Fix vacuumdb's handling of multiple -N switches.
- Fix vacuumdb to honor its --buffer-usage-limit option in analyze-only mode.
- In contrib/amcheck, do not report interrupted page deletion as corruption.
- Fix failure of contrib/btree_gin indexes on interval columns, when an indexscan using the < or <= operator is performed.
- Add support for LLVM 16 and 17.
- Suppress assorted build-time warnings on recent macOS.
- When building contrib/unaccent's rules file, fall back to using python if --with-python was not given and make variable PYTHON was not set.

v15.3 [May 25, 2023]
- Prevent CREATE SCHEMA from defeating changes in search_path (Alexander Lakhin). Within a CREATE SCHEMA command, objects in the prevailing search_path, as well as those in the newly-created schema, would be visible even within a called function or script that attempted to set a secure search_path. This could allow any user having permission to create a schema to hijack the privileges of a security definer function or extension script.
- Fix memory leakage and unnecessary disk reads during CREATE DATABASE with the STRATEGY WAL_LOG option (Andres Freund). - Avoid crash when the new schema name is omitted in CREATE SCHEMA (Michael Paquier). The SQL standard allows writing CREATE SCHEMA AUTHORIZATION owner_name, with the schema name defaulting to owner_name. However some code paths expected the schema name to be present and would fail.
- Fix various planner failures with MERGE commands (Tom Lane). Planning could fail with errors like “variable not found in subplan target list” or “PlaceHolderVar found where not expected”.
- Fix the row count reported by MERGE for some corner cases (Dean Rasheed). The row count reported in the command tag counted rows that actually hadn't been modified due to a BEFORE ROW trigger returning NULL. This is inconsistent with what happens in plain UPDATE or DELETE, so change it to not count such rows. Also, avoid counting a row twice when MERGE moves it into a different partition of a partitioned table.
- Fix MERGE problems with concurrent updates (Dean Rasheed, Álvaro Herrera). Some cases misbehaved if a row to be updated or deleted by MERGE had just been updated by a concurrent transaction. This could lead to a crash, or the wrong merge action being executed, or no action at all.
- Add support for decompiling MERGE commands (Álvaro Herrera). This was overlooked when MERGE was added, but it's essential support for MERGE in new-style SQL functions.
- Fix enabling/disabling of foreign-key triggers in partitioned tables (Tom Lane). ALTER TABLE ... ENABLE/DISABLE TRIGGER failed if applied to a partitioned table's foreign-key enforcement triggers, because it tried to locate the clone triggers for the partitions by name, and they do not have the same name. Locate them by parent-trigger OID instead.
- Disallow altering composite types that are stored in indexes (Tom Lane). ALTER TYPE disallows non-binary-compatible modifications of composite types if they are stored in any table columns. (Perhaps that will be allowed someday, but it hasn't happened yet; the locking implications of rewriting many tables are daunting.) We overlooked the possibility that an index might contain a composite type that doesn't also appear in its table.
- Disallow system columns as elements of foreign keys (Tom Lane). Since the removal of OID as a system column, there is no plausible use-case for this, and various bits of code no longer support it. Disallow it rather than trying to fix all the cases.
- Ensure that COPY TO from an RLS-enabled parent table does not copy any rows from child tables (Antonin Houska). The documentation is quite clear that COPY TO copies rows from only the named table, not any inheritance children it may have. However, if row-level security was enabled on the table then this stopped being true.
- Avoid possible crash when array_position() or array_positions() is passed an empty array (Tom Lane). - Fix possible out-of-bounds fetch in to_char() (Tom Lane). With bad luck this could have resulted in a server crash.
- Avoid buffer overread in translate() function (Daniil Anisimov). When using the deletion feature, the function might fetch the byte just after the input string, creating a small risk of crash.
- Adjust text-search-related character classification logic to correctly detect whether the prevailing locale is C (Jeff Davis). This code got confused if the database's default collation uses ICU.
- Avoid possible crash on empty input for type interval (Tom Lane). - Re-allow exponential notation in ISO-8601 interval fields (Tom Lane). Interval input like P0.1e10D isn't officially sanctioned by ISO-8601, but we accepted it for a long time before version 15, so re-allow it.
- Fix error cursor setting for parse errors in JSON string literals (Tom Lane).

v15.2 [Feb 18, 2023]
E.1.1. Migration to Version 15.2
A dump/restore is not required for those running 15.X.
However, if you are upgrading from a version earlier than 15.1, see Section E.2.
E.1.2. Changes
- libpq can leak memory contents after GSSAPI transport encryption initiation fails (Jacob Champion)
A modified server, or an unauthenticated man-in-the-middle, can send a not-zero-terminated error message during setup of GSSAPI (Kerberos) transport encryption. libpq will then copy that string, as well as following bytes in application memory up to the next zero byte, to its error report. Depending on what the calling application does with the error report, this could result in disclosure of application memory contents. There is also a small probability of a crash due to reading beyond the end of memory. Fix by properly zero-terminating the server message. (CVE-2022-41862)
- Fix calculation of which GENERATED columns need to be updated in child tables during an UPDATE on a partitioned table or inheritance tree (Amit Langote, Tom Lane)
This fixes failure to update GENERATED columns that do not exist in the parent table, or that have different dependencies than are in the parent column's generation expression.
- Fix possible failure of MERGE to compute GENERATED columns (Dean Rasheed)
When the first row-level action of the MERGE was an UPDATE, any subsequent INSERT actions would fail to compute GENERATED columns that were deemed unnecessary to compute for the UPDATE action (due to not depending on any of the UPDATE target columns).
- Fix MERGE's check for unreachable WHEN clauses (Dean Rasheed)
A WHEN clause following an unconditional WHEN clause should be rejected as unreachable, but this case was not always detected.
- Fix MERGE's rule-detection test (Dean Rasheed)
MERGE is not supported on tables with rules; but it also failed on tables that once had rules but no longer do.
- In MERGE, don't count a DO NOTHING action as a processed tuple (Álvaro Herrera)
This makes the code's behavior match the documentation.
- Allow a WITH RECURSIVE ... CYCLE CTE to access its output column (Tom Lane)
A reference to the SET column from within the CTE would fail with “cache lookup failed for type 0”.
- Fix handling of pending inserts when doing a bulk insertion to a foreign table (Etsuro Fujita)
In some cases pending insertions were not flushed to the FDW soon enough, leading to logical inconsistencies, for example BEFORE ROW triggers not seeing rows they should be able to see.
- Allow REPLICA IDENTITY to be set on an index that's not (yet) valid (Tom Lane)
When pg_dump dumps a partitioned index that's marked REPLICA IDENTITY, it generates a command sequence that applies REPLICA IDENTITY before the partitioned index has been marked valid, causing restore to fail. There seems no very good reason to prohibit doing it in that order, so allow it. The marking will have no effect anyway until the index becomes valid.
- Fix handling of DEFAULT markers in rules that perform an INSERT from a multi-row VALUES list (Dean Rasheed)
In some cases a DEFAULT marker would not get replaced with the proper default-value expression, leading to an “unrecognized node type” error.
- Reject uses of undefined variables in jsonpath existence checks (Alexander Korotkov, David G. Johnston)
While jsonpath match operators threw an error for an undefined variable in the path pattern, the existence operators silently treated it as a match.
- Fix jsonb subscripting to cope with toasted subscript values (Tom Lane, David G. Johnston)
Using a text value fetched directly from a table as a jsonb subscript was likely to fail. Fetches would usually not find any matching element. Assignments could store the value with a garbage key, although keys long enough to cause that problem are probably rare in the field.
- Fix edge-case data corruption in parallel hash joins (Dmitry Astapov)
If the final chunk of a large tuple being written out to a temporary file was exactly 32760 bytes, it would be corrupted due to a fencepost bug. The query would typically fail later with corrupted-data symptoms.
- Honor non-default settings of checkpoint_completion_target (Bharath Rupireddy)
Internal state was not updated after a change in checkpoint_completion_target, possibly resulting in performing checkpoint I/O faster or slower than desired, especially if that setting was changed on-the-fly.
- Log the correct ending timestamp in recovery_target_xid mode (Tom Lane)
When ending recovery based on the recovery_target_xid setting with recovery_target_inclusive = off, we printed an incorrect timestamp (always 2000-01-01) in the “recovery stopping before ... transaction” log message.

v14.5 [Aug 26, 2022]
- Do not let extension scripts replace objects not already belonging to the extension (Tom Lane).
- Fix replay of CREATE DATABASE WAL records on standby servers (Kyotaro Horiguchi, Asim R Praveen, Paul Guo).
- Support “in place” tablespaces (Thomas Munro, Michael Paquier, Álvaro Herrera).
- Fix permissions checks in CREATE INDEX (Nathan Bossart, Noah Misch).
- In extended query protocol, force an immediate commit after CREATE DATABASE and other commands that can't run in a transaction block (Tom Lane).
- Fix race condition when checking transaction visibility (Simon Riggs).
- Fix incorrect plans when sorting by an expression that contains a non-top-level set-returning function (Richard Guo, Tom Lane).
- Fix incorrect permissions-checking code for extended statistics (Richard Guo).
- Fix extended statistics machinery to handle MCV-type statistics on boolean-valued expressions (Tom Lane).
- Avoid planner core dump with constant = ANY(array) clauses when there are MCV-type extended statistics on the array variable (Tom Lane).
- Fix ALTER TABLE ... ENABLE/DISABLE TRIGGER to handle recursion correctly for triggers on partitioned tables (Álvaro Herrera, Amit Langote).
- Allow cancellation of ANALYZE while it is computing extended statistics (Tom Lane, Justin Pryzby).
- Improve syntax error messages for type jsonpath (Andrew Dunstan).
- Ensure that pg_stop_backup() cleans up session state properly (Fujii Masao).
- Fix trim_array() to handle a zero-dimensional array argument sanely (Martin Kalcher).
- Fix join alias matching in FOR [KEY] UPDATE/SHARE clauses (Dean Rasheed).
- Reject ROW() expressions and functions in FROM that have too many columns (Tom Lane).
- Fix dumping of a view using a function in FROM that returns a composite type, when column(s) of the composite type have been dropped since the view was made (Tom Lane).
- Disallow nested backup operations in logical replication walsenders (Fujii Masao).
- Fix memory leak in logical replication subscribers (Hou Zhijie).
- Fix logical replication's checking of replica identity when the target table is partitioned (Shi Yu, Hou Zhijie).
- Fix failures to update cached schema data in a logical replication subscriber after a schema change on the publisher (Shi Yu, Hou Zhijie).
- Fix WAL consistency checking logic to correctly handle BRIN_EVACUATE_PAGE flags (Haiyang Wang).
- Fix erroneous assertion checks in shared hashtable management (Thomas Munro).
- Avoid assertion failure when min_dynamic_shared_memory is set to a non-default value (Thomas Munro).
- Arrange to clean up after commit-time errors within SPI_commit(), rather than expecting callers to do that (Peter Eisentraut, Tom Lane).
- Improve libpq's handling of idle states in pipeline mode (Álvaro Herrera, Kyotaro Horiguchi).
- Avoid core dump in ecpglib with unexpected orders of operations (Tom Lane).
- In ecpglib, avoid redundant newlocale() calls (Noah Misch).
- In psql's \watch command, echo a newline after cancellation with control-C (Pavel Stehule).
- Fix pg_upgrade to detect non-upgradable usages of functions taking anyarray (Justin Pryzby).
- Fix possible report of wrong error condition after clone() failure in pg_upgrade with --clone option (Justin Pryzby).
- Fix contrib/pg_stat_statements to avoid problems with very large query-text files on 32-bit platforms (Tom Lane).
- In contrib/postgres_fdw, prevent batch insertion when there are WITH CHECK OPTION constraints (Etsuro Fujita).
- Fix contrib/postgres_fdw to detect failure to send an asynchronous data fetch query (Fujii Masao).
- Ensure that contrib/postgres_fdw sends constants of regconfig and other reg* types with proper schema qualification (Tom Lane).
- Block signals while allocating dynamic shared memory on Linux (Thomas Munro).
- Detect unexpected EEXIST error from shm_open() (Thomas Munro).
- Avoid using signalfd() on illumos systems (Thomas Munro).

v14.2
- Fix for a low probability scenario of index corruption when a HOT (heap-only tuple) chain changes state during VACUUM. Encountering this issue is unlikely, but if you are concerned, please consider reindexing.
- Fix for using REINDEX CONCURRENTLY on TOAST table indexes to prevent corruption. You can fix any TOAST indexes by reindexing them again.
- The psql \password command now defaults to setting the password for the role defined by CURRENT_USER. Additionally, the role name is now included in the password prompt.
- Build extended statistics for partitioned tables. If you previously added extended statistics to a partitioned table, you should run ANALYZE on those tables. As autovacuum currently does not process partitioned tables, you must periodically run ANALYZE on any partitioned tables to update their statistics.
- Fix crash with ALTER STATISTICS when the statistics object is dropped concurrently.
- Fix crash with multiranges when extracting variable-length data types.
- Several fixes to the query planner that lead to incorrect query results.
- Several fixes for query plan memoization.
- Fix startup of a physical replica to tolerate transaction ID wraparound.
- When using logical replication, avoid duplicate transmission of a partitioned table's data when the publication includes both the child and parent tables.
- Disallow altering data type of a partitioned table's columns when the partitioned table's row type is used as a composite type elsewhere.
- Disallow ALTER TABLE ... DROP NOT NULL for a column that is part of a replica identity index.
- Several fixes for caching that correct logical replication behavior and improve performance.
- Fix memory leak when updating expression indexes.
- Avoid leaking memory during REASSIGN OWNED BY operations that reassign ownership of many objects.
- Fix display of whole-row variables appearing in INSERT ... VALUES rules.
- Fix race condition that could lead to failure to localize error messages that are reported early in multi-threaded use of libpq or ecpglib.
- Fix psql \d command for identifying parent triggers.
- Fix failures on Windows when using the terminal as data source or destination. This affected the psql \copy command and using pg_recvlogical with -f -.
- Fix the pg_dump --inserts and --column-inserts modes to handle tables that contain both generated and dropped columns.
- Fix edge cases in how postgres_fdw handles asynchronous queries. These errors could lead to crashes or incorrect results when attempting to run parallel scans of foreign tables.

v13.2
Changes:
- Fix failure to check per-column SELECT privileges in some join queries (Tom Lane).
In some cases involving joins, the parser failed to record all the columns read by a query in the column-usage bitmaps that are used for permissions checking. Although the executor would still insist on some sort of SELECT privilege to run the query, this meant that a user having SELECT privilege on only one column of a table could nonetheless read all its columns through a suitably crafted query.
A stored view that is subject to this problem will have incomplete column-usage bitmaps, and thus permissions will still not be enforced properly on the view after updating. In installations that depend on column-level permissions for security, it is recommended to CREATE OR REPLACE all user-defined views to cause them to be re-parsed.
The PostgreSQL Project thanks Sven Klemm for reporting this problem. (CVE-2021-20229).
- Fix information leakage in constraint-violation error messages (Heikki Linnakangas).
If an UPDATE command attempts to move a row to a different partition but finds that it violates some constraint on the new partition, and the columns in that partition are in different physical positions than in the parent table, the error message could reveal the contents of columns that the user does not have SELECT privilege on. (CVE-2021-3393).
- Fix incorrect detection of concurrent page splits while inserting into a GiST index (Heikki Linnakangas).
Concurrent insertions could lead to a corrupt index with entries placed in the wrong pages. It's recommended to reindex any GiST index that's been subject to concurrent insertions.
- Fix CREATE INDEX CONCURRENTLY to wait for concurrent prepared transactions (Andrey Borodin).
At the point where CREATE INDEX CONCURRENTLY waits for all concurrent transactions to complete so that it can see rows they inserted, it must also wait for all prepared transactions to complete, for the same reason. Its failure to do so meant that rows inserted by prepared transactions might be omitted from the new index, causing queries relying on the index to miss such rows. In installations that have enabled prepared transactions (max_prepared_transactions > 0), it's recommended to reindex any concurrently-built indexes in case this problem occurred when they were built.
- Avoid crash when trying to rescan an aggregation plan node that has both hashed and sorted grouping sets (Jeff Davis).
- Fix possible incorrect query results when a hash aggregation node spills some tuples to disk (Tom Lane).
It was possible for aggregation grouping values to be replaced by nulls when the tuples are read back in, leading to wrong answers.
- Fix edge case in incremental sort (Neil Chen).
If the last tuple of a sort batch chanced to be the first tuple of the next group of already-sorted tuples, the code did the wrong thing. This could lead to “retrieved too many tuples in a bounded sort” error messages, or to silently-wrong sorting results.
- Avoid crash when a CALL or DO statement that performs a transaction rollback is executed via extended query protocol (Thomas Munro, Tom Lane).
In PostgreSQL 13, this case reliably caused a null-pointer dereference. In earlier versions the bug seems to have no visible symptoms, but it's not quite clear that it could never cause a problem.
- Avoid unnecessary errors with BEFORE UPDATE triggers on partitioned tables (Álvaro Herrera).
A BEFORE UPDATE FOR EACH ROW trigger that modified the row in any way prevented UPDATE from moving the row to another partition when needed; but there is no longer any reason for this restriction.
- Fix partition pruning logic to handle asymmetric hash partition sets (Tom Lane).
If a hash-partitioned table has unequally-sized partitions (that is, varying modulus values), or it lacks partitions for some remainder values, then the planner's pruning logic could mistakenly conclude that some partitions don't need to be scanned, leading to failure to find rows that the query should find.
- Avoid incorrect results when WHERE CURRENT OF is applied to a cursor whose plan contains a MergeAppend node (Tom Lane).
This case is unsupported (in general, a cursor using ORDER BY is not guaranteed to be simply updatable); but the code previously did not reject it, and could silently give false matches.
- Fix crash when WHERE CURRENT OF is applied to a cursor whose plan contains a custom scan node (David Geier).
- Fix planner's mishandling of placeholders whose evaluation should be delayed by an outer join (Tom Lane).

v13.1
- Block DECLARE CURSOR ... WITH HOLD and firing of deferred triggers within index expressions and materialized view queries (Noah Misch).
- Fix usage of complex connection-string parameters in pg_dump, pg_restore, clusterdb, reindexdb, and vacuumdb (Tom Lane).
- When psql's \connect command re-uses connection parameters, ensure that all non-overridden parameters from a previous connection string are re-used (Tom Lane).
- Prevent psql's \gset command from modifying specially-treated variables (Noah Misch).
- Fix unintended breakage of the replication protocol (Álvaro Herrera).
- Ensure that SLRU directories are properly fsync'd during checkpoints (Thomas Munro).
This prevents possible data loss in a subsequent operating system crash..
- Fix ALTER ROLE for users with the BYPASSRLS attribute (Tom Lane, Stephen Frost).
The BYPASSRLS attribute is only allowed to be changed by superusers, but other ALTER ROLE operations, such as password changes, should be allowed with only ordinary permission checks. The previous coding erroneously restricted all changes on such a role to superusers..
- Disallow ALTER TABLE ONLY ... DROP EXPRESSION when there are child tables (Peter Eisentraut).
The current implementation cannot handle this case correctly, so just forbid it for now..
- Ensure that ALTER TABLE ONLY ... ENABLE/DISABLE TRIGGER does not recurse to child tables (Álvaro Herrera).
- Allow LOCK TABLE to succeed on a self-referential view (Tom Lane).
- Retain statistics about an index across REINDEX CONCURRENTLY (Michael Paquier, Fabrízio de Royes Mello).
- Fix incorrect progress reporting from REINDEX CONCURRENTLY (Matthias van de Meent, Michael Paquier).
- Ensure that GENERATED columns are updated when the column(s) they depend on are updated via a rule or an updatable view (Tom Lane).
- Fix failures with collation-dependent partition bound expressions (Tom Lane).
- Support hashing of text arrays (Peter Eisentraut).
- Prevent internal overflows in cross-type datetime comparisons (Nikita Glukhov, Alexander Korotkov, Tom Lane).
- Fix off-by-one conversion of negative years to BC dates in to_date() and to_timestamp() (Dar Alathar-Yemen, Tom Lane).
- Allow the jsonpath .datetime() method to accept ISO 8601-format timestamps (Nikita Glukhov).
- Ensure that standby servers will archive WAL timeline history files when archive_mode is set to always (Grigory Smolkin, Fujii Masao).
- Fix edge cases in detecting premature death of the postmaster on platforms that use kqueue() (Thomas Munro).
- Avoid generating an incorrect incremental-sort plan when the sort key is a volatile expression (James Coleman).
- Fix possible crash when considering partition-wise joins during GEQO planning (Tom Lane).
- Fix possible infinite loop or corrupted output data in TOAST decompression (Tom Lane).
- Fix counting of the number of entries in B-tree indexes during cleanup-only VACUUMs (Peter Geoghegan).
- Ensure that data is detoasted before being inserted into a BRIN index (Tomas Vondra).
- Fix buffered GiST index builds to work when the index has included columns (Pavel Borisov).
- Fix unportable use of getnameinfo() in pg_hba_file_rules view (Tom Lane).
- Avoid crash if debug_query_string is NULL when starting a parallel worker (Noah Misch).
- Avoid failures when a BEFORE ROW UPDATE trigger returns the “old” row of a table having dropped or “missing” columns (Amit Langote, Tom Lane).
- Fix EXPLAIN's output for incremental sort plans to have correct tag nesting in XML output mode (Daniel Gustafsson).
- Avoid unnecessary failure when transferring very large payloads through shared memory queues (Markus Wanner).
- Fix omission of result data type coercion in some cases in SQL-language functions (Tom Lane).
This could lead to wrong results or crashes, depending on the data types involved.
- Fix incorrect handling of template function attributes in JIT code generation (Andres Freund).
- Improve code generated for compare_exchange and fetch_add operations on PPC (Noah Misch).
- Fix relation cache memory leaks with RLS policies (Tom Lane).
- Fix edge-case memory leak in index_get_partition() (Justin Pryzby).
- Fix small memory leak when SIGHUP processing decides that a new GUC variable value cannot be applied without a restart (Tom Lane).
- Fix memory leaks in PL/pgsql's CALL processing (Pavel Stehule, Tom Lane).
- In libpq for Windows, call WSAStartup() once per process and WSACleanup() not at all (Tom Lane, Alexander Lakhin).
- Fix ecpg library's per-thread initialization logic for Windows (Tom Lane, Alexander Lakhin).
- Fix ecpg's mis-processing of B'..' and X'..' literals (Shenhao Wang).
- Ensure that pg_dump collects per-column information about extension configuration tables (Fabrízio de Royes Mello, Tom Lane).
- Make pg_upgrade check for pre-existence of tablespace directories in the target cluster (Bruce Momjian).
- Fix potential memory leak in contrib/pgcrypto (Michael Paquier).

v13.0 [Aug 15, 2020]
- Allow pruning of partitions to happen in more cases.
- Allow partitionwise joins to happen in more cases.
- Support row-level BEFORE triggers on partitioned tables.
- Allow partitioned tables to be logically replicated via publications.
- Allow logical replication into partitioned tables on subscribers.
- Allow whole-row variables.
- More efficiently store duplicates in B-tree indexes.
- Allow GiST and SP-GiST indexes on box columns to support ORDER BY box <-> point queries.
- Allow GIN indexes to more efficiently handle !.
- Allow index operator classes to take parameters.
- Allow CREATE INDEX to specify the GiST signature length and maximum number of integer ranges.
- Prevent indexes that use non-default collations from being added as a table's unique or primary key constraint.
- Improve the optimizer's selectivity estimation for containment/match operators.
- Allow setting the statistics target for extended statistics.
- Allow use of multiple extended statistics objects in a single query.
- Allow use of extended statistics objects for OR clauses and IN/ANY constant lists.
- Allow functions in FROM clauses to be pulled up.
- Implement incremental sorting.
- Improve the performance of sorting inet values.
- Allow hash aggregation to use disk storage for large aggregation result sets.
- Allow inserts, not only updates and deletes, to trigger vacuuming activity in autovacuum.
- Add maintenance_io_concurrency parameter to control I/O concurrency for maintenance operations.
- Allow WAL writes to be skipped during a transaction that creates or rewrites a relation, if wal_level is minimal.
- Improve performance when replaying DROP DATABASE commands when many tablespaces are in use.
- Improve performance for truncation of very large relations.
- Improve retrieval of the leading bytes of TOAST'ed values.
- Improve performance of LISTEN/NOTIFY.
- Speed up conversions of integers to text.
- Reduce memory usage for query strings and extension scripts that contain many SQL statements.
- Allow EXPLAIN, auto_explain, autovacuum, and pg_stat_statements to track WAL usage statistics.
- Allow a sample of SQL statements, rather than all statements, to be logged.
- Add the backend type to csvlog and optionally log_line_prefix log output.
- Improve control of prepared statement parameter logging.
- Allow function call backtraces to be logged after errors.
- Make vacuum buffer counters 64-bits wide to avoid overflow.
- Add leader_pid to pg_stat_activity to report a parallel worker's leader process.
- Add system view pg_stat_progress_basebackup to report the progress of streaming base backups.
- Add system view pg_stat_progress_analyze to report ANALYZE progress.
- Add system view pg_shmem_allocations to display shared memory usage.
- Add system view pg_stat_slru to monitor internal SLRU caches.
- Allow track_activity_query_size to be set as high as 1MB.
- Report a wait event while creating a DSM segment with posix_fallocate().
- Add wait event VacuumDelay to report on cost-based vacuum delay.
- Add wait events for WAL archive and recovery pause.
- Add wait events RecoveryConflictSnapshot and RecoveryConflictTablespace to monitor recovery conflicts.
- Improve performance of wait events on BSD-based systems.
- Allow only superusers to view the ssl_passphrase_command setting.
- Change the server's default minimum TLS version for encrypted connections from 1.0 to 1.2.
- Tighten rules on which utility commands are allowed in read-only transaction mode.
- Allow allow_system_table_mods to be changed after server start.
- Disallow non-superusers from modifying system tables when allow_system_table_mods is set.
- Enable support for Unix-domain sockets on Windows.
- Allow streaming replication configuration settings to be changed by reload.
- Allow WAL receivers to use a temporary replication slot when a permanent one is not specified.
- Allow WAL storage for replication slots to be limited by max_slot_wal_keep_size.
- Allow standby promotion to cancel any requested pause.
- Generate an error if recovery does not reach the specified recovery target.
- Allow control over how much memory is used by logical decoding before it is spilled to disk.
- Allow recovery to continue even if invalid pages are referenced by WAL.
- Allow VACUUM to process a table's indexes in parallel.
- Allow FETCH FIRST to use WITH TIES to return any additional rows that match the last result row.
- Report planning-time buffer usage in EXPLAIN's BUFFER output.
- Make CREATE TABLE LIKE propagate a CHECK constraint's NO INHERIT property to the created table.
- When using LOCK TABLE on a partitioned table, do not check permissions on the child tables.
- Allow OVERRIDING USER VALUE on inserts into identity columns.
- Add ALTER TABLE ... DROP EXPRESSION to allow removing the GENERATED property from a column.
- Fix bugs in multi-step ALTER TABLE commands.
- Add ALTER VIEW syntax to rename view columns.

v12.4 [Aug 15, 2020]
- Set a secure search_path in logical replication walsenders and apply workers: A malicious user of either the publisher or subscriber database could potentially cause execution of arbitrary SQL code by the role running replication, which is often a superuser. Some of the risks here are equivalent to those described in CVE-2018-1058, and are mitigated in this patch by ensuring that the replication sender and receiver execute with empty search_path settings. (As with CVE-2018-1058, that change might cause problems for under-qualified names used in replicated tables' DDL.) Other risks are inherent in replicating objects that belong to untrusted roles; the most we can do is document that there is a hazard to consider. (CVE-2020-14349)
- Make contrib modules' installation scripts more secure: Attacks similar to those described in CVE-2018-1058 could be carried out against an extension installation script, if the attacker can create objects in either the extension's target schema or the schema of some prerequisite extension. Since extensions often require superuser privilege to install, this can open a path to obtaining superuser privilege. To mitigate this risk, be more careful about the search_path used to run an installation script; disable check_function_bodies within the script; and fix catalog-adjustment queries used in some contrib modules to ensure they are secure. Also provide documentation to help third-party extension authors make their installation scripts secure. This is not a complete solution; extensions that depend on other extensions can still be at risk if installed carelessly. (CVE-2020-14350)
- Fix edge cases in partition pruning: When there are multiple partition key columns, generation of pruning tests could misbehave if some columns had no constraining WHERE clauses or multiple constraining clauses. This could lead to server crashes, incorrect query results, or assertion failures.
- Fix construction of parameterized BitmapAnd and BitmapOr index scans on the inside of partition-wise nestloop joins: A plan in which such a scan needed to use a value from the outside of the join would usually crash at execution.
- Fix incorrect plan execution when a partitioned table is subject to both static and run-time partition pruning in the same query, and a new partition is added concurrently with the query (Amit Langote, Tom Lane)
- In logical replication walsender, fix failure to send feedback messages after sending a keepalive message: This is a relatively minor problem when using built-in logical replication, because the built-in walreceiver will send a feedback reply (which clears the incorrect state) fairly frequently anyway. But with some other replication systems, such as pglogical, it causes significant performance issues.
- Fix firing of column-specific UPDATE triggers in logical replication subscribers: The code neglected to account for the possibility of column numbers being different between the publisher and subscriber tables, so that if those were indeed different, wrong decisions might be made about which triggers to fire.
- Update oldest xmin and LSN values during pg_replication_slot_advance(): This function previously failed to do that, possibly preventing resource cleanup (such as removal of no-longer-needed WAL segments) after manual advancement of a replication slot.
- Fix slow execution of ts_headline(): The phrase-search fix added in our previous set of minor releases could cause ts_headline() to take unreasonable amounts of time for long documents; to make matters worse, the query was not cancellable within the troublesome loop.
- Ensure the repeat() function can be interrupted by query cancel.
- Fix pg_current_logfile() to not include a carriage return (\r) in its result on Windows.
- Ensure that pg_read_file() and related functions read until EOF is reached: Previously, if not given a specific data length to read, these functions would stop at whatever file length was reported by stat(). That's unhelpful for pipes and other sorts of virtual files.
- Forbid numeric NaN values in jsonpath computations: Neither SQL nor JSON have the concept of NaN (not-a-number), but the jsonpath code attempted to allow such values anyway. This necessarily leads to nonstandard behavior, so it seems better to reject such values at the outset.
- Handle single Inf or NaN inputs correctly in floating-point aggregates: The affected aggregates are corr(), covar_pop(), regr_intercept(), regr_r2(), regr_slope(), regr_sxx(), regr_sxy(), regr_syy(), stddev_pop(), and var_pop(). The correct answer in such cases is NaN, but an algorithmic change introduced in PostgreSQL v12 had caused these aggregates to produce zero instead.

v12.3 [Jul 3, 2020]
- Fix possible failure with GENERATED columns: If a GENERATED column's value is an exact copy of another column of the table (and it is a pass-by-reference data type), it was possible to crash or insert corrupted data into the table. While it would be rather pointless for a GENERATED expression to just duplicate another column, an expression using a function that sometimes returns its input unchanged could create the situation.
- Handle inheritance of generated columns better: When a table column is inherited during CREATE TABLE ... INHERITS, disallow changing any generation properties when the parent column is already marked GENERATED; but allow a child column to be marked GENERATED when its parent is not.
- Fix cross-column references in CREATE TABLE LIKE INCLUDING GENERATED: CREATE TABLE ... LIKE failed when trying to copy a GENERATED expression that references a physically-later column.
- Propagate ALTER TABLE ... SET STORAGE to indexes: Non-expression index columns have always copied the attstorage property of their table column at creation. Update them when ALTER TABLE ... SET STORAGE is done, to maintain consistency.
- Preserve the indisclustered setting of indexes rewritten by ALTER TABLE: Previously, ALTER TABLE lost track of which index had been used for CLUSTER.
- Preserve the replica identity properties of indexes rewritten by ALTER TABLE.
- Preserve the indisclustered setting of indexes rebuilt by REINDEX CONCURRENTLY.
- Lock objects sooner during DROP OWNED BY: This avoids failures in race-condition cases where another session is deleting some of the same objects.
- Fix error-case processing for CREATE ROLE ... IN ROLE: Some error cases would be reported as “unexpected node type” or the like, instead of the intended message.
- Ensure that when a partition is detached, any triggers cloned from its formerly-parent table are removed.
- Fix crash when COLLATE is applied to a non-collatable type in a partition bound expression.
- Ensure that unique indexes over partitioned tables match the equality semantics of the partitioning key: This would only be an issue with index opclasses that have unusual notions of equality, but it's wrong in theory, so check.
- Ensure that members of the pg_read_all_stats role can read all statistics views, as expected: The functions underlying the pg_stat_progress_* views had not gotten this memo.
- Repair performance regression in information_schema.triggers view: This patch redefines that view so that an outer WHERE clause constraining the table name can be pushed down into the view, allowing its calculations to be done only for triggers belonging to the table of interest rather than all triggers in the database. In a database with many triggers this would make a significant speed difference for queries of that form. Since things worked that way before v11, this is a potential performance regression. Users who find this to be a problem can fix it by replacing the view definition. or, perhaps, just deleting and reinstalling the whole information_schema schema).
- Repair performance regression in floating point overflow/underflow detection: Previous refactoring had resulted in isinf() being called extra times in some hot code paths.
- Fix full text search to handle NOT above a phrase search correctly: Queries such as !(foobar) failed to find matching rows when implemented as a GiST or GIN index search.
- Fix full text search for cases where a phrase search includes an item with both prefix matching and a weight restriction.
- Fix ts_headline() to make better headline selections when working with phrase queries.
- Fix bugs in gin_fuzzy_search_limit processing: A small value of gin_fuzzy_search_limit could result in unexpected slowness due to unintentionally rescanning the same index page many times. Another code path failed to apply the intended filtering at all, possibly returning too many values.
- Allow input of type circle to accept the format “(x,y),r” as the documentation says it does.
- Make the get_bit() and set_bit() functions cope with bytea strings longer than 256MB: Since the bit number argument is only int4, it's impossible to use these functions to access bits beyond the first 256MB of a long bytea. We'll widen the argument to int8 in v13, but in the meantime, allow these functions to work on the initial substring of a long bytea.
- Ignore file-not-found errors in pg_ls_waldir() and allied functions: This prevents a race condition failure if a file is removed between when we see its directory entry and when we attempt to stat() it.
- Avoid possibly leaking an open-file descriptor for a directory in pg_ls_dir(), pg_timezone_names(), pg_tablespace_databases(), and allied functions.
- Fix polymorphic-function type resolution to correctly infer the actual type of an anyarray output when given only an anyrange input.

v10.5 [Aug 30, 2018]
- Fix failure to reset libpq's state fully between connection attempts (Tom Lane).
- Fix INSERT ... ON CONFLICT UPDATE through a view that isn't just SELECT * FROM ... (Dean Rasheed, Amit Langote).
- Ensure that updates to the relfrozenxid and relminmxid values for “nailed” system catalogs are processed in a timely fashion (Andres Freund).
- Fix case where a freshly-promoted standby crashes before having completed its first post-recovery checkpoint (Michael Paquier, Kyotaro Horiguchi, Pavan Deolasee, Álvaro Herrera).
- Avoid emitting a bogus WAL record when recycling an all-zero btree page (Amit Kapila).
- During WAL replay, guard against corrupted record lengths exceeding 1GB (Michael Paquier).
- When ending recovery, delay writing the timeline history file as long as possible (Heikki Linnakangas).
- Improve performance of WAL replay for transactions that drop many relations (Fujii Masao).
- Improve performance of lock releasing in standby server WAL replay (Thomas Munro).
- Make logical WAL senders report streaming state correctly (Simon Riggs, Sawada Masahiko).
- Ensure that a snapshot is provided when executing data type input functions in logical replication subscribers (Minh-Quan Tran, Álvaro Herrera).
- Fix bugs in snapshot handling during logical decoding, allowing wrong decoding results in rare cases (Arseny Sher, Álvaro Herrera).
- Add subtransaction handling in logical-replication table synchronization workers (Amit Khandekar, Robert Haas).
- Ensure a table's cached index list is correctly rebuilt after an index creation fails partway through (Peter Geoghegan).
- Fix mishandling of empty uncompressed posting list pages in GIN indexes (Sivasubramanian Ramasubramanian, Alexander Korotkov).
- Pad arrays of unnamed POSIX semaphores to reduce cache line sharing (Thomas Munro).
- Ensure that a process doing a parallel index scan will respond to signals (Amit Kapila).
- Ensure that VACUUM will respond to signals within btree page deletion loops (Andres Freund).
- Fix hash-join costing mistake introduced with inner_unique optimization (David Rowley).
- Fix misoptimization of equivalence classes involving composite-type columns (Tom Lane).
- Fix planner to avoid “ORDER/GROUP BY expression not found in targetlist” errors in some queries with set-returning functions (Tom Lane).
- Fix handling of partition keys whose data type uses a polymorphic btree operator class, such as arrays (Amit Langote, Álvaro Herrera).
- Fix SQL-standard FETCH FIRST syntax to allow parameters ($n), as the standard expects (Andrew Gierth).
- Remove undocumented restriction against duplicate partition key columns (Yugo Nagata).
- Disallow temporary tables from being partitions of non-temporary tables (Amit Langote, Michael Paquier).
- Fix EXPLAIN's accounting for resource usage, particularly buffer accesses, in parallel workers (Amit Kapila, Robert Haas).
- Fix SHOW ALL to show all settings to roles that are members of pg_read_all_settings, and also allow such roles to see source filename and line number in the pg_settings view (Laurenz Albe, Álvaro Herrera).
- Fix failure to schema-qualify some object names in getObjectDescription and getObjectIdentity output (Kyotaro Horiguchi, Tom Lane).
- Fix CREATE AGGREGATE type checking so that parallelism support functions can be attached to variadic aggregates (Alexey Bashtanov).
- Widen COPY FROM's current-line-number counter from 32 to 64 bits (David Rowley).
- Allow replication slots to be dropped in single-user mode (Álvaro Herrera).
- Fix incorrect results from variance(int4) and related aggregates when run in parallel aggregation mode (David Rowley).
- Process TEXT and CDATA nodes correctly in xmltable() column expressions (Markus Winand).
- Cope with possible failure of OpenSSL's RAND_bytes() function (Dean Rasheed, Michael Paquier).
- Fix libpq's handling of some cases where hostaddr is specified (Hari Babu, Tom Lane, Robert Haas).
- Add a string freeing function to ecpg's pgtypes library, so that cross-module memory management problems can be avoided on Windows (Takayuki Tsunakawa).
- Fix ecpg's support for long long variables on Windows, as well as other platforms that declare strtoll/strtoull nonstandardly or not at all (Dang Minh Huong, Tom Lane).
- Fix misidentification of SQL statement type in PL/pgSQL, when a rule change causes a change in the semantics of a statement intra-session (Tom Lane).
- Fix password prompting in client programs so that echo is properly disabled on Windows when stdin is not the terminal (Matthew Stickney).
- Further fix mis-quoting of values for list-valued GUC variables in dumps (Tom Lane).

v9.6.11.18310 [May 19, 2016]
Changes
Fix WAL-logging of truncation of relation free space maps and visibility maps (Pavan Deolasee, Heikki Linnakangas)
It was possible for these files to not be correctly restored during crash recovery, or to be written incorrectly on a standby server. Bogus entries in a free space map could lead to attempts to access pages that have been truncated away from the relation itself, typically producing errors like "could not read block XXX: read only 0 of 8192 bytes". Checksum failures in the visibility map are also possible, if checksumming is enabled.
Procedures for determining whether there is a problem and repairing it if so are discussed at https://wiki.postgresql.org/wiki/Free_Space_Map_Problems.
Fix possible data corruption when pg_upgrade rewrites a relation visibility map into 9.6 format (Tom Lane)
On big-endian machines, bytes of the new visibility map were written in the wrong order, leading to a completely incorrect map. On Windows, the old map was read using text mode, leading to incorrect results if the map happened to contain consecutive bytes that matched a carriage return/line feed sequence. The latter error would almost always lead to a pg_upgrade failure due to the map file appearing to be the wrong length.
If you are using a big-endian machine (many non-Intel architectures are big-endian) and have used pg_upgrade to upgrade from a pre-9.6 release, you should assume that all visibility maps are incorrect and need to be regenerated. It is sufficient to truncate each relation's visibility map with contrib/pg_visibility's pg_truncate_visibility_map() function. For more information see https://wiki.postgresql.org/wiki/Visibility_Map_Problems.
Don't throw serialization errors for self-conflicting insertions in INSERT ... ON CONFLICT (Thomas Munro, Peter Geoghegan)
Fix use-after-free hazard in execution of aggregate functions using DISTINCT (Peter Geoghegan)
This could lead to a crash or incorrect query results.
Fix incorrect handling of polymorphic aggregates used as window functions (Tom Lane)
The aggregate's transition function was told that its first argument and result were of the aggregate's output type, rather than the state type. This led to errors or crashes with polymorphic transition functions.
Fix COPY with a column name list from a table that has row-level security enabled (Adam Brightwell)
Fix EXPLAIN to emit valid XML when track_io_timing is on (Markus Winand)
Previously the XML output-format option produced syntactically invalid tags such as . That is now rendered as .
Fix statistics update for TRUNCATE in a prepared transaction (Stas Kelvich)
Fix bugs in merging inherited CHECK constraints while creating or altering a table (Tom Lane, Amit Langote)
Allow identical CHECK constraints to be added to a parent and child table in either order. Prevent merging of a valid constraint from the parent table with a NOT VALID constraint on the child. Likewise, prevent merging of a NO INHERIT child constraint with an inherited constraint.
Show a sensible value in pg_settings.unit for min_wal_size and max_wal_size (Tom Lane)
Fix replacement of array elements in jsonb_set() (Tom Lane)
If the target is an existing JSON array element, it got deleted instead of being replaced with a new value.
Avoid very-low-probability data corruption due to testing tuple visibility without holding buffer lock (Thomas Munro, Peter Geoghegan, Tom Lane)
Preserve commit timestamps across server restart (Julien Rouhaud, Craig Ringer)
With track_commit_timestamp turned on, old commit timestamps became inaccessible after a clean server restart.
Fix logical WAL decoding to work properly when a subtransaction's WAL output is large enough to spill to disk (Andres Freund)
Fix dangling-pointer problem in logical WAL decoding (Stas Kelvich)
Round shared-memory allocation request to a multiple of the actual huge page size when attempting to use huge pages on Linux (Tom Lane)
This avoids possible failures during munmap() on systems with atypical default huge page sizes. Except in crash-recovery cases, there were no ill effects other than a log message.
Don't try to share SSL contexts across multiple connections in libpq (Heikki Linnakangas)
This led to assorted corner-case bugs, particularly when trying to use different SSL parameters for different connections.
Avoid corner-case memory leak in libpq (Tom Lane)
The reported problem involved leaking an error report during PQreset(), but there might be related cases.

v9.5.4.16230 [Oct 12, 2015]
- Allow INSERTs that would generate constraint conflicts to be turned into UPDATEs or ignored
- Add GROUP BY analysis features GROUPING SETS, CUBE and ROLLUP
- Add row-level security control
- Create mechanisms for tracking the progress of replication, including methods for identifying the origin of individual changes during logical replication
- Add Block Range Indexes (BRIN)
- Substantial performance improvements for sorting
- Substantial performance improvements for multi-CPU machines.

v9.4.2 [May 21, 2014]
- Added jsonb, a more capable and efficient data type for storing JSON data
- Added SQL command ALTER SYSTEM for changing postgresql.conf configuration file entries
- Reduced lock strength for some ALTER TABLE commands
- Allow materialized views to be refreshed without blocking concurrent reads
- Added support for logical decoding of WAL data, to allow database changes to be streamed out in a customizable format
- Allow background worker processes to be dynamically registered, started and terminated

v9.3 [Aug 30, 2013]
- Update hstore extension with JSON functionality
- Prevent memory leak when creating range indexes
- Fix libpq SSL deadlock bug
- Guarantee transmission of all WAL files before replica failover
- Prevent downcasing of non-ASCII identifiers
- Fix several minor memory leaks
- Correct overcommit behavior when using more than 24GB of work memory
- Improve planner cost estimates for choosing generic plans
- Fix estimates of NULL rows in boolean columns
- Make UNION ALL and inheritance query plans recheck parameterized paths
- Correct pg_dump bugs for foreign tables, views and extensions
- Prevent a parallel pg_restore failure on certain indexes
- Make REINDEX revalidate constraints
- Prevent two deadlock issues in SP-GIST and REINDEX CONCURRENTLY
- Prevent GiST index lookup crash
- Fix several regular expression failures
- Allow ALTER DEFAULT PRIVILEGES to work on all schemas
- Loosen restrictions on keywords
- Allow various spellings of infinity
- Expand ability to compare rows to records and arrays
- Prevent psql client crash on bad PSQLRC file
- Add spinlock support for ARM64

v9.3 [May 22, 2013]
-Writeable Foreign Tables, enabling pushing data to other databases
-pgsql_fdw driver for federation of PostgreSQL databases
-Automatic updatable views
-Materialiazed view declaration
-Additional JSON constructor and extractor functions
-Indexed regular expression search
-Disk page checksums to detect filesystem failures
-In 9.3, PostgreSQL has greatly reduced its requirement for SysV shared memory, changing to mmap(). This allows easier installation and configuration of PostgreSQL, but means that we need our users to rigorously test and ensure that no memory management issues have been introduced by the change. We also request that users spend extra time testing the improvements to Foreign Key locks.
-Fast failover to replicas for high availability
-Streaming-only remastering of replicas
-Performance and locking improvements for Foreign Key locks
-Parallel pg_dump for faster backups
-Directories for configuration files
-pg_isready database connection checker
-Copy freeze for reduced IO bulk loading
-User-defined background workers for automating database tasks
-Recursive view declaration
-lock_timeout directive

v9.2 [Sep 10, 2012]
-Prevent psql crash due to incorrectly encoded input data
-Fix pg_regress gmake build issues
-Make sure correct directory is created for extensions
-Fix some issues with buffer locks and VACUUM
-Multiple fixes and improvements for pg_upgrade
-Fix bugs with end-of-recovery when failing over to a standby
-Avoid bogus "out-of-sequence timeline ID" errors in standby-mode
-Don't launch new child processes during shutdown
-Improve the ability of JOINs to use partial indexes
-Fix assorted integer overflow errors
-Eliminate memory leaks in record_out() and record_send()
-Skip searching for subtransaction logs at COMMIT
-Fix WaitLatch() timing issues
-Fix handling of inherited check constraints in ALTER COLUMN TYPE
-Make ALTER EXTENSION SET SCHEMA behave as documented
-Have SEQUENCE SET statements in the "data" section of sectional dumps
-Prevent parser from believing that VIEWs have system columns
-Fix --clean mode for pg_dump
-Prevent hash table corruption on out-of-memory
-Various query planner and executor fixes and improvements
-Multiple documentation updates
-DST updates for seven timezones

Alternative downloads

MicroOLAP Database Designer for PostgreSQL
MicroOLAP Database Designer
rating

You can perform database structure modeling, generation and modification.

MS SQL PHP Generator Professional
MS SQL PHP Generator Professional
rating

MS SQL PHP Generator is a MS SQL Server GUI frontend.

DBConvert for MS Access & PostgreSQL
DBConvert for MS Access &
rating

This program is an effective two-way database conversion tool.

Query Tool (using ADO)
Query Tool
rating

Universal Data Access (UDA) tool.