Monday, January 22

Committed to the PostgreSQL Community, 2ndQuadrant Contributes to 9.6


The latest version of PostgreSQL 9.6 is planned to be released later today, bringing with it some much anticipated features and updates. As the most advanced open source database, PostgreSQL strives to release a major version roughly once every year. With an active and collaborative community, this PostgreSQL release boasts impressive features and updates thanks to contributions from many of the highly knowledgeable community members.  

The expanding team at 2ndQuadrant has continued to show dedication to the PostgreSQL database project by contributing heavily to the PostgreSQL 9.6 release. Parallel execution of large queries has been a known shortcoming of PostgreSQL for some time, but this is no longer an issue with the 9.6 release. David Rowley and Simon Riggs contributed to this effort through working on initial support for parallel execution of large queries and the capability of an aggregate function to be split into two separate parts. For example, now the parallel worker processes can cooperate on computing an aggregate function. David and Simon worked alongside Robert Haas, Amit Kapila, and many others to develop this robust feature.

Simon also contributed to the improvement of functions for very large databases by reducing interlocking on standby servers during replay of btree index vacuuming operations. Other contributions from Simon include:

  • Improved performance of short-lived prepared transactions (with Stas Kelvich and Pavan Deolasee)
  • Improved performance by moving buffer content locks into the buffer descriptors (with Andres Freund)
  • Reducing the lock strength needed by ALTER TABLE when setting fillfactor and autovacuum-related relation options (with Fabrízio de Royes Mello)
  • Raising the maximum allowed value of checkpoint_timeout to 24 hours

Tomas Vondra was another heavy contributor by contributing the following to the 9.6 release:

  • Ability to use an index-only scan with a partial index when the index’s predicate involves column(s) not stored in the index (with Kyotaro Horiguchi)
  • Improved planner’s estimate of the number of distinct values in a query result
  • Using foreign key relationships to infer selectivity for join predicates (with David Rowley)
  • Improved ANALYZE’s estimates for columns with many nulls (with Alex Shulgin)
  • Adding function pg_current_xlog_flush_location() to expose the current transaction log flush location
  • Adding log_line_prefix option %n to print the time as a Unix epoch, with milliseconds (with Jeff Davis)

Peter Eisentraut had several contributions including:

  • Adding –with-systemd configure switch to enable calling sd_notify() at server start and stop
  • Merging the archive and hot_standby values of the wal_level configuration parameter into a single value replica, adding syslog_sequence_numbers
  • syslog_split_messages configuration parameters to provide more control over message format when logging to syslog
  • Letting pg_basebackup use a replication slot defined for WAL streaming. After the base backup completes selecting the same slot for regular streaming replication allows seamless startup of the new standby server
  • Including the table name in object tags for object types that are only uniquely named per-table in pg_dump

In addition to the above, there are many additional notable contributions made by 2ndQuadrant team members:

  • Drop entries from GROUP BY if they are functionally dependent on other entries (David Rowley)
  • Improve aggregate-function performance by sharing calculations across multiple aggregates if they have the same arguments and transition functions (David Rowley)
  • Improve speed of the output functions for timestamps, times, and dates (David Rowley & Andres Freund)
  • Allowing sessions to be terminated automatically if they sit too long in an idle-in-transaction state (Vik Fearing)
  • Allowing a database object to be marked as depending on an extension, so that it will automatically go away if the extension is dropped (without needing CASCADE) (Abhijit Menon-Sen)
  • CREATE ACCESS METHOD to allow extensions to create index access methods (Petr Jelínek and Alexander Korotkov)
  • CASCADE option to CREATE EXTENSION, to automatically create extensions it depends on (Petr Jelínek)
  • Disallowing creation of indexes on system columns to avoid misbehavior since the system might change the system-column fields of a tuple without updating indexes (David Rowley)
  • Improving pg_restore’s -t switch to match all types of relations, not only plain tables (Craig Ringer)
  • Numerous minor improvements in tab-completion behavior (Peter Eisentraut, Vik Fearing, Kevin Grittner, Kyotaro Horiguchi, Jeff Janes, Andreas Karlsson, Fujii Masao, Thomas Munro, Masahiko Sawada, and Pavel Stehule)
  • Allow pg_dump to dump non-extension-owned objects that are within an extension-owned schema (Martín Marqués)
  • Improvements to TAP testing infrastructure. It is now possible to test recovery scenarios using this infrastructure (Michael Paquier, Craig Ringer, Álvaro Herrera, and Stephen Frost)
  • Introduction of a generic interface for writing WAL records to allow extensions to write WAL records (Petr Jelínek, Alexander Korotkov, and Markus Nullmeier)
  • Generic WAL messages for logical decoding support allows extensions to insert data into the WAL stream that can be read by logical-decoding plugins without connecting to physical data restoration (Petr Jelínek and Anrdres Freund)
  • Introduction of auto_explain.sample_rate parameter to allow contrib/auto_explain to capture just a configurable fraction of all queries (Craig Ringer and Julien Rouhaud)

The team at 2ndQuadrant is passionate about Open Source and PostgreSQL. To us it’s not work, but pursuit of knowledge, and drive to improve the growing database that our business is built around. This clearly shows through the continuous contributions and commitment to serving our customers and the community with integrity and cutting edge support and development.  Continuous growth and success of PostgreSQL not only benefits our customers but the community as a whole in which we belong.


    • Relatively few, actually. Most of the BDR work went into 9.5. The main things that’re BDR-related for 9.6 are logical WAL messages (which we needed for BDR) and CREATE EXTENSION CASCADE (which is nice to have). Sequence access methods were submitted but did not get in. Same for logical decoding timeline following / failover slots.

      A lot of time in 9.6 went into the pglogical submission, which has now morphed into the v10 logical replication patch series.

      The great majority of the work listed here for 9.6 is unrelated to logical replication and BDR.

Leave a Reply

Your email address will not be published. Required fields are marked *