10.11. Release 15.1

10.11.1. Release date:

2022-11-10

This release contains a variety of fixes from 15.0. For information about new features in major release 15, see release-15.

10.11.1.1. Migration to Version 15.1

A dump/restore is not required for those running 15.X.

However, if you regularly create and drop tables exceeding 1GB, see the first changelog entry below.

10.11.1.2. Changes

  1. Fix failure to remove non-first segments of large tables (Tom Lane)

    PostgreSQL splits large tables into multiple files (normally with 1GB per file). The logic for dropping a table was broken and would miss removing all but the first such file, in two cases: drops of temporary tables and WAL replay of drops of regular tables. Applications that routinely create multi-gigabyte temporary tables could suffer significant disk space leakage.

    Orphaned temporary-table files are removed during postmaster start, so the mere act of updating to 15.1 is sufficient to clear any leaked temporary-table storage. However, if you suffered any database crashes while using 15.0, and there might have been large tables dropped just before such crashes, it’s advisable to check the database directories for files named according to the pattern NNNN.NN. If there is no matching file named just NNNN (without the .NN suffix), these files should be removed manually.

  2. Fix handling of DEFAULT tokens that appear in a multi-row VALUES clause of an INSERT on an updatable view (Tom Lane)

    This oversight could lead to cache lookup failed for type errors, or in older branches even to crashes.

  3. Disallow rules named _RETURN that are not ON SELECT (Tom Lane)

    This avoids confusion between a view’s ON SELECT rule and any other rules it may have.

  4. Avoid failure in EXPLAIN VERBOSE for a query using SEARCH BREADTH FIRST with constant initial values (Tom Lane)

  5. Prevent use of MERGE on a partitioned table with foreign-table partitions (Álvaro Herrera)

    The case isn’t supported, and previously threw an incomprehensible error.

  6. Fix construction of per-partition foreign key constraints while doing ALTER TABLE ATTACH PARTITION (Jehan-Guillaume de Rorthais, Álvaro Herrera)

    Previously, incorrect or duplicate constraints could be constructed for the newly-added partition.

  7. Fix planner failure with extended statistics on partitioned or inherited tables (Richard Guo, Justin Pryzby)

    Some cases failed with cache lookup failed for statistics object.

  8. Fix mis-ordering of WAL operations in fast insert path for GIN indexes (Matthias van de Meent, Zhang Mingli)

    This mistake is not known to have any negative consequences within core PostgreSQL, but it did cause issues for some extensions.

  9. Fix bugs in logical decoding when replay starts from a point between the beginning of a transaction and the beginning of its subtransaction (Masahiko Sawada, Kuroda Hayato)

    These errors could lead to assertion failures in debug builds, and otherwise to memory leaks.

  10. Accept interrupts in more places during logical decoding (Amit Kapila, Masahiko Sawada)

    This ameliorates problems with slow shutdown of replication workers.

  11. Prevent attempts to replicate into a foreign-table partition in replication workers (Shi Yu, Tom Lane)

    Although partitioned tables can have foreign tables as partitions, replicating into such a partition isn’t currently supported. The logical replication worker process would crash if it was attempted. Now, an error is thrown.

  12. Avoid crash after function syntax error in replication workers (Maxim Orlov, Anton Melnikov, Masahiko Sawada, Tom Lane)

    If a syntax error occurred in a SQL-language or PL/pgSQL-language CREATE FUNCTION or DO command executed in a logical replication worker, the worker process would crash with a null pointer dereference or assertion failure.

  13. Avoid double call of the shutdown callback of an archiver module (Nathan Bossart, Bharath Rupireddy)

  14. Add plan-time check for attempted access to a table that has no table access method (Tom Lane)

    This prevents a crash in some catalog-corruption scenarios, for example use of a view whose ON SELECT rule is missing.

  15. Prevent postmaster crash when shared-memory state is corrupted (Tom Lane)

    The postmaster process is supposed to survive and initiate a database restart if shared memory becomes corrupted, but one bit of code was being insufficiently cautious about that.

  16. In libpq, handle single-row mode correctly when pipelining (Denis Laxalde)

    The single-row flag was not reset at the correct time if pipeline mode was also active.

  17. Fix psql’s exit status when a command-line query is canceled (Peter Eisentraut)

    psql -c query would exit successfully if the query was canceled. Fix it to exit with nonzero status, as in other error cases.

  18. Allow cross-platform tablespace relocation in pg_basebackup (Robert Haas)

    Allow the remote path in –tablespace-mapping to be either a Unix-style or Windows-style absolute path, since the source server could be on a different OS than the local system.

  19. Fix pg_dump’s failure to dump comments attached to some CHECK constraints (Tom Lane)

  20. Fix CREATE DATABASE to allow its oid parameter to exceed 231 (Tom Lane)

    This oversight prevented pg_upgrade from succeeding when the source installation contained databases with OIDs larger than that.

  21. In pg_stat_statements, fix access to already-freed memory (zhaoqigui)

    This occurred if pg_stat_statements tracked a ROLLBACK command issued via extended query protocol. In debug builds it consistently led to an assertion failure. In production builds there would often be no visible ill effect; but if the freed memory had already been reused, the likely result would be to store garbage for the query string.

  22. Fix incompatibilities with LLVM 15 (Thomas Munro, Andres Freund)

  23. Allow use of __sync_lock_test_and_set() for spinlocks on any machine (Tom Lane)

    This eases porting to new machine architectures, at least if you’re using a compiler that supports this GCC builtin function.

  24. Rename symbol REF to REF_P to avoid compile failure on recent macOS (Tom Lane)

  25. Avoid using sprintf, to avoid compile-time deprecation warnings (Tom Lane)

  26. Update time zone data files to tzdata release 2022f for DST law changes in Chile, Fiji, Iran, Jordan, Mexico, Palestine, and Syria, plus historical corrections for Chile, Crimea, Iran, and Mexico.

    Also, the Europe/Kiev zone has been renamed to Europe/Kyiv. Also, the following zones have been merged into nearby, more-populous zones whose clocks have agreed with them since 1970: Antarctica/Vostok, Asia/Brunei, Asia/Kuala_Lumpur, Atlantic/Reykjavik, Europe/Amsterdam, Europe/Copenhagen, Europe/Luxembourg, Europe/Monaco, Europe/Oslo, Europe/Stockholm, Indian/Christmas, Indian/Cocos, Indian/Kerguelen, Indian/Mahe, Indian/Reunion, Pacific/Chuuk, Pacific/Funafuti, Pacific/Majuro, Pacific/Pohnpei, Pacific/Wake and Pacific/Wallis. (This indirectly affects zones that were already links to one of these: Arctic/Longyearbyen, Atlantic/Jan_Mayen, Iceland, Pacific/Ponape, Pacific/Truk, and Pacific/Yap.) America/Nipigon, America/Rainy_River, America/Thunder_Bay, Europe/Uzhgorod, and Europe/Zaporozhye were also merged into nearby zones after discovering that their claimed post-1970 differences from those zones seem to have been errors. In all these cases, the previous zone name remains as an alias; but the actual data is that of the zone that was merged into.

    These zone mergers result in loss of pre-1970 timezone history for the merged zones, which may be troublesome for applications expecting consistency of timestamptz display. As an example, the stored value 1944-06-01 12:00 UTC would previously display as 1944-06-01 13:00:00+01 if the Europe/Stockholm zone is selected, but now it will read out as 1944-06-01 14:00:00+02.

    It is possible to build the time zone data files with options that will restore the older zone data, but that choice also inserts a lot of other old (and typically poorly-attested) zone data, resulting in more total changes from the previous release than accepting these upstream changes does. PostgreSQL has chosen to ship the tzdb data as-recommended, and so far as we are aware most major operating system distributions are doing likewise. However, if these changes cause significant problems for your application, a possible solution is to install a local build of the time zone data files using tzdb’s backwards-compatibility options (see their PACKRATDATA and PACKRATLIST options).

10.12. Release 15

10.12.1. Release date:

2022-10-13

10.12.1.1. Overview

PostgreSQL 15 contains many new features and enhancements, including:

  1. Support for the SQL

    linkend=»sql-merge»>**MERGE** command.

  2. Selective publication of tables“ contents within

    linkend=»logical-replication»>logical replication

    publications, through the ability to specify column lists and row filter conditions.

  3. More options for compression, including support for Zstandard (zstd) compression. This includes support for performing compression on the server side during

    linkend=»app-pgbasebackup»>pg_basebackup.

  4. Support for structured linkend=»guc-log-destination»>server log output using the JSON format.

  5. Performance improvements, particularly for in-memory and on-disk sorting.

The above items and other new features of PostgreSQL 15 are explained in more detail in the sections below.

10.12.1.2. Migration to Version 15

A dump/restore using app-pg-dumpall or use of pgupgrade or logical replication is required for those wishing to migrate data from any previous release. See upgrading for general information on migrating to new major releases.

Version 15 contains a number of changes that may affect compatibility with previous releases. Observe the following incompatibilities:

  1. Remove PUBLIC creation permission on the linkend=»ddl-schemas-public»>**public** schema (Noah Misch)

    The new default is one of the secure schema usage patterns that ddl-schemas-patterns has recommended since the security release for CVE-2018-1058. The change applies to new database clusters and to newly-created databases in existing clusters. Upgrading a cluster or restoring a database dump will preserve public’s existing permissions.

    For existing databases, especially those having multiple users, consider revoking CREATE permission on the public schema to adopt this new default. For new databases having no need to defend against insider threats, granting CREATE permission will yield the behavior of prior releases.

  2. Change the owner of the public schema to be the new pg_database_owner role (Noah Misch)

    This allows each database’s owner to have ownership privileges on the public schema within their database. Previously it was owned by the bootstrap superuser, so that non-superuser database owners could not do anything with it.

    This change applies to new database clusters and to newly-created databases in existing clusters. Upgrading a cluster or restoring a database dump will preserve public’s existing ownership specification.

  3. Remove long-deprecated linkend=»backup-base-backup»>exclusive backup mode (David Steele, Nathan Bossart)

    If the database server stops abruptly while in this mode, the server could fail to start. The non-exclusive backup mode is considered superior for all purposes. Functions pg_start_backup()/pg_stop_backup() have been renamed to pg_backup_start()/pg_backup_stop(), and the functions pg_backup_start_time() and pg_is_in_backup() have been removed.

  4. Increase linkend=»guc-hash-mem-multiplier»>**hash_mem_multiplier** default to 2.0 (Peter Geoghegan)

    This allows query hash operations to use more

    linkend=»guc-work-mem»>**work_mem**

    memory than other operations.

  5. Remove server-side language linkend=»plpython»>**plpython2u** and generic Python language plpythonu (Andres Freund)

    Python 2.x is no longer supported. While the original intent of plpythonu was that it could eventually refer to plpython3u, changing it now seems more likely to cause problems than solve them, so it’s just been removed.

  6. Generate an error if linkend=»textsearch-functions-table»>**array_to_tsvector()** is passed an empty-string array element (Jean-Christophe Arnu)

    This is prohibited because lexemes should never be empty. Users of previous Postgres releases should verify that no empty lexemes are stored because they can lead to dump/restore failures and inconsistent results.

  7. Generate an error when linkend=»functions-string-other»>**chr()** is supplied with a negative argument (Peter Eisentraut)

  8. Prevent linkend=»sql-createview»>**CREATE OR REPLACE VIEW** from changing the collation of an output column (Tom Lane)

  9. Disallow zero-length linkend=»sql-syntax-identifiers»>Unicode identifiers, e.g., U&»» (Peter Eisentraut)

    Non-Unicode zero-length identifiers were already disallowed.

  10. Prevent linkend=»sql-syntax-constants-numeric»>numeric literals from having non-numeric trailing characters (Peter Eisentraut)

    Previously, query text like 123abc would be interpreted as 123 followed by a separate token abc.

  11. Adjust linkend=»datatype-json»>JSON numeric literal processing to match the SQL/JSON-standard (Peter Eisentraut)

    This accepts numeric formats like .1 and 1., and disallows trailing junk after numeric literals, like 1.type().

  12. When linkend=»datatype-datetime»>**interval** input provides a fractional value for a unit greater than months, round to the nearest month (Bruce Momjian)

    For example, convert 1.99 years to 2 years, not 1 year 11 months as before.

  13. Improve consistency of interval parsing with trailing periods (Tom Lane)

    Numbers with trailing periods were rejected on some platforms.

  14. Mark the interval output function as stable, not immutable, since it depends on linkend=»guc-intervalstyle»>**IntervalStyle** (Tom Lane)

    This will, for example, cause creation of indexes relying on the text output of interval values to fail.

  15. Detect integer overflow in linkend=»functions-datetime-table»>interval justification functions (Joe Koshakow)

    The affected functions are justify_interval(), justify_hours(), and justify_days().

  16. Change the I/O format of type «char» for non-ASCII characters (Tom Lane)

    Bytes with the high bit set are now output as a backslash and three octal digits, to avoid encoding issues.

  17. Remove the default linkend=»sql-createrole»>**ADMIN OPTION** privilege a login role has on its own role membership (Robert Haas)

    Previously, a login role could add/remove members of its own role, even without ADMIN OPTION privilege.

  18. Allow linkend=»logical-replication»>logical replication to run as the owner of the subscription (Mark Dilger)

    Because row-level security policies are not checked, only superusers, roles with bypassrls, and table owners can replicate into tables with row-level security policies.

  19. Prevent UPDATE and DELETE

    linkend=»logical-replication»>logical replication

    operations on tables where the subscription owner does not have SELECT permission on the table (Jeff Davis)

    UPDATE and DELETE commands typically involve reading the table as well, so require the subscription owner to have table SELECT permission.

  20. When linkend=»sql-explain»>**EXPLAIN** references the session’s temporary object schema, refer to it as pg_temp (Amul Sul)

    Previously the actual schema name was reported, leading to inconsistencies across sessions.

  21. Fix linkend=»monitoring-pg-statio-all-tables-view»>**pg_statio_all_tables** to sum values for the rare case of TOAST tables with multiple indexes (Andrei Zubkov)

    Previously such cases would show one row for each index.

  22. Disallow setting linkend=»runtime-config-custom»>custom options that match the name of an installed extension, but are not one of the extension’s declared variables (Florin Irion, Tom Lane)

    This change causes any such pre-existing variables to be deleted during extension load, and then prevents new ones from being created later in the session. The intent is to prevent confusion about whether a variable is associated with an extension or not.

  23. Remove obsolete server variable stats_temp_directory (Andres Freund, Kyotaro Horiguchi)

  24. Improve the algorithm used to compute linkend=»functions-math-random-table»>**random()** (Fabien Coelho)

    This will cause random()“s results to differ from what was emitted by prior versions, even for the same seed value.

  25. libpq’s linkend=»libpq-PQsendQuery»>**PQsendQuery()** function is no longer supported in pipeline mode (Álvaro Herrera)

    Applications that are using that combination will need to be modified to use PQsendQueryParams() instead.

  26. On non-Windows platforms, consult the HOME environment variable to find the user’s home directory (Anders Kaseorg)

    If HOME is empty or unset, fall back to the previous method of checking the <pwd.h> database. This change affects libpq (for example, while looking up ~/.pgpass) as well as various client application programs.

  27. Remove linkend=»app-pgdump»>pg_dump’s –no-synchronized-snapshots option (Tom Lane)

    All still-supported server versions support synchronized snapshots, so there’s no longer a need for this option.

  28. After an error is detected in linkend=»app-psql»>psql’s –single-transaction mode, change the final COMMIT command to ROLLBACK only if ON_ERROR_STOP is set (Michael Paquier)

  29. Avoid unnecessary casting of constants in queries sent by linkend=»postgres-fdw»>postgres_fdw (Dian Fay)

    When column types are intentionally different between local and remote databases, such casts could cause errors.

  30. Remove linkend=»xml2»>xml2’s xml_is_well_formed() function (Tom Lane)

    This function has been implemented in the core backend since Postgres 9.1.

  31. Allow linkend=»custom-scan»>custom scan providers to indicate if they support projections (Sven Klemm)

    The default is now that custom scan providers are assumed to not support projections; those that do will need to be updated for this release.

10.12.1.3. Changes

Below you will find a detailed account of the changes between PostgreSQL 15 and the previous major release.

10.12.1.3.1. Server

  1. Record and check the collation version of each linkend=»sql-createdatabase»>database (Peter Eisentraut)

    This feature is designed to detect collation version changes to avoid index corruption. Function pg_database_collation_actual_version() reports the underlying operating system collation version, and ALTER DATABASE … REFRESH sets the recorded database collation version to match the operating system collation version.

  2. Allow linkend=»locale»>ICU collations to be set as the default for clusters and databases (Peter Eisentraut)

    Previously, only libc-based collations could be selected at the cluster and database levels. ICU collations could only be used via explicit COLLATE clauses.

  3. Add system view linkend=»view-pg-ident-file-mappings»>**pg_ident_file_mappings** to report pg_ident.conf information (Julien Rouhaud)

10.12.1.3.1.1. linkend=»ddl-partitioning»>Partitioning
  1. Improve planning time for queries referencing partitioned tables (David Rowley)

    This change helps when only a few of many partitions are relevant.

  2. Allow ordered scans of partitions to avoid sorting in more cases (David Rowley)

    Previously, a partitioned table with a DEFAULT partition or a LIST partition containing multiple values could not be used for ordered partition scans. Now they can be used if such partitions are pruned during planning.

  3. Improve foreign key behavior of updates on partitioned tables that move rows between partitions (Amit Langote)

    Previously, such updates ran a delete action on the source partition and an insert action on the target partition. PostgreSQL will now run an update action on the partition root, providing cleaner semantics.

  4. Allow linkend=»sql-cluster»>**CLUSTER** on partitioned tables (Justin Pryzby)

  5. Fix linkend=»sql-altertable»>**ALTER TRIGGER RENAME** on partitioned tables to properly rename triggers on all partitions (Arne Roland, Álvaro Herrera)

    Also prohibit cloned triggers from being renamed.

10.12.1.3.1.2. Indexes
  1. Allow btree indexes on system and linkend=»storage-toast»>TOAST tables to efficiently store duplicates (Peter Geoghegan)

    Previously de-duplication was disabled for these types of indexes.

  2. Improve lookup performance of linkend=»gist»>GiST indexes that were built using sorting (Aliaksandr Kalenik, Sergei Shoulbakov, Andrey Borodin)

  3. Allow unique constraints and indexes to treat NULL values as not distinct (Peter Eisentraut)

    Previously NULL entries were always treated as distinct values, but this can now be changed by creating constraints and indexes using UNIQUE NULLS NOT DISTINCT.

  4. Allow the linkend=»functions-string-other»>**^@** starts-with operator and the starts_with() function to use btree indexes if using the C collation (Tom Lane)

    Previously these could only use linkend=»spgist»>SP-GiST indexes.

10.12.1.3.1.3. Optimizer
  1. Allow linkend=»sql-createstatistics»>extended statistics to record statistics for a parent with all its children (Tomas Vondra, Justin Pryzby)

    Regular statistics already tracked parent and parent-plus-all-children statistics separately.

  2. Add server variable linkend=»guc-recursive-worktable-factor»>**recursive_worktable_factor** to allow the user to specify the expected size of the working table of a linkend=»queries-with-recursive»>recursive query (Simon Riggs)

10.12.1.3.1.4. General Performance
  1. Allow hash lookup for linkend=»functions-subquery-notin»>**NOT IN** clauses with many constants (David Rowley, James Coleman)

    Previously the code always sequentially scanned the list of values.

  2. Allow SELECT DISTINCT to be parallelized (David Rowley)

  3. Speed up encoding validation of UTF-8 text by processing 16 bytes at a time (John Naylor, Heikki Linnakangas)

    This will improve text-heavy operations like linkend=»sql-copy»>**COPY FROM**.

  4. Improve performance for sorts that exceed linkend=»guc-work-mem»>**work_mem** (Heikki Linnakangas)

    When the sort data no longer fits in work_mem, switch to a batch sorting algorithm that uses more output streams than before.

  5. Improve performance and reduce memory consumption of in-memory sorts (Ronan Dunklau, David Rowley, Thomas Munro, John Naylor)

  6. Allow WAL linkend=»guc-full-page-writes»>full page writes to use LZ4 and Zstandard compression (Andrey Borodin, Justin Pryzby)

    This is controlled by the linkend=»guc-wal-compression»>**wal_compression** server setting.

  7. Add support for writing WAL using linkend=»guc-wal-sync-method»>direct I/O on macOS (Thomas Munro)

    This only works if max_wal_senders = 0 and wal_level = minimal.

  8. Allow linkend=»routine-vacuuming»>vacuum to be more aggressive in setting the oldest frozen and multi transaction id (Peter Geoghegan)

  9. Allow a query referencing multiple linkend=»ddl-foreign-data»>foreign tables to perform parallel foreign table scans in more cases (Andrey Lepikhov, Etsuro Fujita)

  10. Improve the performance of linkend=»functions-window»>window functions that use row_number(), rank(), dense_rank() and count() (David Rowley)

  11. Improve the performance of spinlocks on high-core-count ARM64 systems (Geoffrey Blake)

10.12.1.3.1.5. Monitoring
  1. Enable default logging of checkpoints and slow autovacuum operations (Bharath Rupireddy)

    This changes the default of linkend=»guc-log-checkpoints»>**log_checkpoints** to on and that of linkend=»guc-log-autovacuum-min-duration»>**log_autovacuum_min_duration** to 10 minutes. This will cause even an idle server to generate some log output, which might cause problems on resource-constrained servers without log file rotation. These defaults should be changed in such cases.

  2. Generate progress messages in the server log during slow server starts (Nitin Jadhav, Robert Haas)

    The messages report the cause of the delay. The time interval for notification is controlled by the new server variable linkend=»guc-log-startup-progress-interval»>**log_startup_progress_interval**.

  3. Store linkend=»monitoring-stats»>cumulative statistics system data in shared memory (Kyotaro Horiguchi, Andres Freund, Melanie Plageman)

    Previously this data was sent to a statistics collector process via UDP packets, and could only be read by sessions after transferring it via the file system. There is no longer a separate statistics collector process.

  4. Add additional information to VACUUM VERBOSE and autovacuum logging messages (Peter Geoghegan)

  5. Add linkend=»sql-explain»>**EXPLAIN (BUFFERS)** output for temporary file block I/O (Masahiko Sawada)

  6. Allow linkend=»guc-log-destination»>log output in JSON format (Sehrope Sarkuni, Michael Paquier)

    The new setting is log_destination = jsonlog.

  7. Allow linkend=»monitoring-stats-funcs-table»>**pg_stat_reset_single_table_counters()** to reset the counters of relations shared across all databases (Sadhuprasad Patro)

  8. Add linkend=»wait-event-table»>wait events for local shell commands (Fujii Masao)

    The new wait events are used when calling archive_command, archive_cleanup_command, restore_command and recovery_end_command.

10.12.1.3.1.6. Privileges
  1. Allow table accesses done by a linkend=»sql-createview»>view to optionally be controlled by privileges of the view’s caller (Christoph Heiss)

    Previously, view accesses were always treated as being done by the view’s owner. That’s still the default.

  2. Allow members of the linkend=»predefined-roles-table»>**pg_write_server_files** predefined role to perform server-side base backups (Dagfinn Ilmari Mannsåker)

    Previously only superusers could perform such backups.

  3. Allow linkend=»sql-grant»>**GRANT** to grant permissions to change individual server variables via SET and ALTER SYSTEM (Mark Dilger)

    The new function has_parameter_privilege() reports on this privilege.

  4. Add predefined role linkend=»predefined-roles-table»>**pg_checkpoint** that allows members to run CHECKPOINT (Jeff Davis)

    Previously checkpoints could only be run by superusers.

  5. Allow members of the linkend=»predefined-roles-table»>**pg_read_all_stats** predefined role to access the views linkend=»view-pg-backend-memory-contexts»>**pg_backend_memory_contexts** and linkend=»view-pg-shmem-allocations»>**pg_shmem_allocations** (Bharath Rupireddy)

    Previously these views could only be accessed by superusers.

  6. Allow linkend=»sql-grant»>**GRANT** to grant permissions on linkend=»functions-admin-signal»>**pg_log_backend_memory_contexts()** (Jeff Davis)

    Previously this function could only be run by superusers.

10.12.1.3.1.7. Server Configuration
  1. Add server variable linkend=»guc-shared-memory-size»>**shared_memory_size** to report the size of allocated shared memory (Nathan Bossart)

  2. Add server variable linkend=»guc-shared-memory-size-in-huge-pages»>**shared_memory_size_in_huge_pages** to report the number of huge memory pages required (Nathan Bossart)

    This is only supported on Linux.

  3. Honor server variable linkend=»guc-shared-preload-libraries»>**shared_preload_libraries** in single-user mode (Jeff Davis)

    This change supports use of shared_preload_libraries to load custom access methods and WAL resource managers, which would be essential for database access even in single-user mode.

  4. On Solaris, make the default setting of linkend=»guc-dynamic-shared-memory-type»>**dynamic_shared_memory_type** be sysv (Thomas Munro)

    The previous default choice, posix, can result in spurious failures on this platform.

  5. Allow linkend=»app-postgres»>**postgres -C** to properly report runtime-computed values (Nathan Bossart)

    Previously runtime-computed values linkend=»guc-data-checksums»>**data_checksums**,

    linkend=»guc-wal-segment-size»>**wal_segment_size**, and linkend=»guc-data-directory-mode»>**data_directory_mode** would report values that would not be accurate on the running server. However, this does not work on a running server.

10.12.1.3.2. Streaming Replication and Recovery

  1. Add support for LZ4 and Zstandard compression of server-side linkend=»backup-base-backup»>base backups (Jeevan Ladhe, Robert Haas)

  2. Run the checkpointer and bgwriter processes during crash recovery (Thomas Munro)

    This helps to speed up long crash recoveries.

  3. Allow WAL processing to pre-fetch needed file contents (Thomas Munro)

    This is controlled by the server variable linkend=»guc-recovery-prefetch»>**recovery_prefetch**.

  4. Allow archiving via loadable modules (Nathan Bossart)

    Previously, archiving was only done by calling shell commands. The new server variable linkend=»guc-archive-library»>**archive_library** can be set to specify a library to be called for archiving.

  5. No longer require linkend=»protocol-replication»>**IDENTIFY_SYSTEM** to be run before START_REPLICATION (Jeff Davis)

10.12.1.3.2.1. linkend=»logical-replication»>Logical Replication
  1. Allow linkend=»sql-createpublication»>publication of all tables in a schema (Vignesh C, Hou Zhijie, Amit Kapila)

    For example, this syntax is now supported: CREATE PUBLICATION pub1 FOR TABLES IN SCHEMA s1,s2. ALTER PUBLICATION supports a similar syntax. Tables added later to the listed schemas will also be replicated.

  2. Allow publication content to be filtered using a WHERE clause (Hou Zhijie, Euler Taveira, Peter Smith, Ajin Cherian, Tomas Vondra, Amit Kapila)

    Rows not satisfying the WHERE clause are not published.

  3. Allow publication content to be restricted to specific columns (Tomas Vondra, Álvaro Herrera, Rahila Syed)

  4. Allow skipping of transactions on a subscriber using linkend=»sql-altersubscription»>**ALTER SUBSCRIPTION … SKIP** (Masahiko Sawada)

  5. Add support for prepared (two-phase) transactions to logical replication (Peter Smith, Ajin Cherian, Amit Kapila, Nikhil Sontakke, Stas Kelvich)

    The new linkend=»protocol-replication»>**CREATE_REPLICATION_SLOT** option is called TWO_PHASE. pg_recvlogical now supports a new –two-phase option during slot creation.

  6. Prevent logical replication of empty transactions (Ajin Cherian, Hou Zhijie, Euler Taveira)

    Previously, publishers would send empty transactions to subscribers if subscribed tables were not modified.

  7. Add SQL functions to monitor the directory contents of logical replication slots (Bharath Rupireddy)

    The new functions are linkend=»functions-admin-genfile-table»>**pg_ls_logicalsnapdir()**, pg_ls_logicalmapdir(), and pg_ls_replslotdir(). They can be run by members of the predefined pg_monitor role.

  8. Allow subscribers to stop the application of logical replication changes on error (Osumi Takamichi, Mark Dilger)

    This is enabled with the subscriber option linkend=»sql-createsubscription»>**disable_on_error** and avoids possible infinite error loops during stream application.

  9. Adjust subscriber server variables to match the publisher so datetime and float8 values are interpreted consistently (Japin Li)

    Some publishers might be relying on inconsistent behavior.

  10. Add system view linkend=»monitoring-pg-stat-subscription-stats»>**pg_stat_subscription_stats** to report on subscriber activity (Masahiko Sawada)

    The new function linkend=»monitoring-stats-functions»>**pg_stat_reset_subscription_stats()** allows resetting these statistics counters.

  11. Suppress duplicate entries in the linkend=»view-pg-publication-tables»>**pg_publication_tables** system view (Hou Zhijie)

    In some cases a partition could appear more than once.

10.12.1.3.3. Utility Commands

  1. Add SQL linkend=»sql-merge»>**MERGE** command to adjust one table to match another (Simon Riggs, Pavan Deolasee, Álvaro Herrera, Amit Langote)

    This is similar to INSERT … ON CONFLICT but more batch-oriented.

  2. Add support for HEADER option in linkend=»sql-copy»>**COPY** text format (Rémi Lapeyre)

    The new option causes the column names to be output, and optionally verified on input.

  3. Add new WAL-logged method for linkend=»sql-createdatabase»>database creation (Dilip Kumar)

    This is the new default method for copying the template database, as it avoids the need for checkpoints during database creation. However, it might be slow if the template database is large, so the old method is still available.

  4. Allow linkend=»sql-createdatabase»>**CREATE DATABASE** to set the database OID (Shruthi Gowda, Antonin Houska)

  5. Prevent linkend=»sql-dropdatabase»>**DROP DATABASE**, linkend=»sql-droptablespace»>**DROP TABLESPACE**, and linkend=»sql-alterdatabase»>**ALTER DATABASE SET TABLESPACE** from occasionally failing during concurrent use on Windows (Thomas Munro)

  6. Allow foreign key linkend=»ddl-constraints-fk»>**ON DELETE SET** actions to affect only specified columns (Paul Martinez)

    Previously, all of the columns in the foreign key were always affected.

  7. Allow linkend=»sql-altertable»>**ALTER TABLE** to modify a table’s ACCESS METHOD (Justin Pryzby, Jeff Davis)

  8. Properly call object access hooks when linkend=»sql-altertable»>**ALTER TABLE** causes table rewrites (Michael Paquier)

  9. Allow creation of unlogged linkend=»sql-createsequence»>sequences (Peter Eisentraut)

  10. Track dependencies on individual columns in the results of functions returning composite types (Tom Lane)

    Previously, if a view or rule contained a reference to a specific column within the result of a composite-returning function, that was not noted as a dependency; the view or rule was only considered to depend on the composite type as a whole. This meant that dropping the individual column would be allowed, causing problems in later use of the view or rule. The column-level dependency is now also noted, so that dropping such a column will be rejected unless the view is changed or dropped.

10.12.1.3.4. Data Types

  1. Allow the scale of a linkend=»datatype-numeric»>**numeric** value to be negative, or greater than its precision (Dean Rasheed, Tom Lane)

    This allows rounding of values to the left of the decimal point, e.g., „1234“::numeric(4, -2) returns 1200.

  2. Improve overflow detection when casting values to linkend=»datatype-datetime»>interval (Joe Koshakow)

  3. Change the I/O format of type «char» for non-ASCII characters (Tom Lane)

  4. Update the display width information of modern Unicode characters, like emojis (Jacob Champion)

    Also update from Unicode 5.0 to 14.0.0. There is now an automated way to keep Postgres updated with Unicode releases.

10.12.1.3.5. Functions

  1. Add multirange input to linkend=»functions-aggregate-table»>**range_agg()** (Paul Jungwirth)

  2. Add linkend=»tutorial-agg»>**MIN()** and MAX() aggregates for the linkend=»datatype-int»>**xid8** data type (Ken Kato)

  3. Add regular expression functions for compatibility with other relational systems (Gilles Darold, Tom Lane)

    The new functions are linkend=»functions-string-other»>**regexp_count()**, regexp_instr(), regexp_like(), and regexp_substr(). Some new optional arguments were also added to regexp_replace().

  4. Add the ability to compute the distance between linkend=»datatype-polygon»>**polygons** (Tom Lane)

  5. Add linkend=»functions-formatting-table»>**to_char()** format codes of, tzh, and tzm (Nitin Jadhav)

    The upper-case equivalents of these were already supported.

  6. When applying linkend=»functions-datetime-zoneconvert»>**AT TIME ZONE** to a time with time zone value, use the transaction start time rather than wall clock time to determine whether DST applies (Aleksander Alekseev, Tom Lane)

    This allows the conversion to be considered stable rather than volatile, and it saves a kernel call per invocation.

  7. Ignore NULL array elements in linkend=»textsearch-functions-table»>**ts_delete()** and setweight() functions with array arguments (Jean-Christophe Arnu)

    These functions effectively ignore empty-string array elements (since those could never match a valid lexeme). It seems consistent to let them ignore NULL elements too, instead of failing.

  8. Add support for petabyte units to linkend=»functions-admin-dbsize»>**pg_size_pretty()** and pg_size_bytes() (David Christensen)

  9. Change linkend=»pg-event-trigger-ddl-command-end-functions»>**pg_event_trigger_ddl_commands()** to output references to other sessions“ temporary schemas using the actual schema name (Tom Lane)

    Previously this function reported all temporary schemas as pg_temp, but it’s misleading to use that for any but the current session’s temporary schema.

10.12.1.3.6. linkend=»plpgsql»>PL/pgSQL

  1. Fix enforcement of PL/pgSQL variable CONSTANT markings (Tom Lane)

    Previously, a variable could be used as a linkend=»plpgsql-statements-calling-procedure»>**CALL** output parameter or refcursor OPEN variable despite being marked CONSTANT.

10.12.1.3.7. linkend=»libpq»>libpq

  1. Allow IP address matching against a server certificate’s Subject Alternative Name (Jacob Champion)

  2. Allow PQsslAttribute() to report the SSL library type without requiring a libpq connection (Jacob Champion)

  3. Change query cancellations sent by the client to use the same TCP settings as normal client connections (Jelte Fennema)

    This allows configured TCP timeouts to apply to query cancel connections.

  4. Prevent libpq event callback failures from forcing an error result (Tom Lane)

10.12.1.3.8. Client Applications

  1. Allow linkend=»pgbench»>pgbench to retry after serialization and deadlock failures (Yugo Nagata, Marina Polyakova)

10.12.1.3.8.1. app-psql
  1. Improve performance of psql’s copy command, by sending data in larger chunks (Heikki Linnakangas)

  2. Add dconfig command to report server variables (Mark Dilger, Tom Lane)

    This is similar to the server-side SHOW command, but it can process patterns to show multiple variables conveniently.

  3. Add getenv command to assign the value of an environment variable to a psql variable (Tom Lane)

  4. Add + option to the lo_list and dl commands to show large-object privileges (Pavel Luzanov)

  5. Add a pager option for the watch command (Pavel Stehule, Thomas Munro)

    This is only supported on Unix and is controlled by the PSQL_WATCH_PAGER environment variable.

  6. Make psql include intra-query double-hyphen comments in queries sent to the server (Tom Lane, Greg Nancarrow)

    Previously such comments were removed from the query before being sent. Double-hyphen comments that are before any query text are not sent, and are not recorded as separate psql history entries.

  7. Adjust psql so that Readline’s meta-# command will insert a double-hyphen comment marker (Tom Lane)

    Previously a pound marker was inserted, unless the user had taken the trouble to configure a non-default comment marker.

  8. Make psql output all results when multiple queries are passed to the server at once (Fabien Coelho)

    Previously, only the last query result was displayed. The old behavior can be restored by setting the SHOW_ALL_RESULTS psql variable to off.

  9. After an error is detected in –single-transaction mode, change the final COMMIT command to ROLLBACK only if ON_ERROR_STOP is set (Michael Paquier)

    Previously, detection of an error in a -c command or -f script file would lead to issuing ROLLBACK at the end, regardless of the value of ON_ERROR_STOP.

  10. Improve psql’s tab completion (Shinya Kato, Dagfinn Ilmari Mannsåker, Peter Smith, Koyu Tanigawa, Ken Kato, David Fetter, Haiying Tang, Peter Eisentraut, Álvaro Herrera, Tom Lane, Masahiko Sawada)

  11. Limit support of psql’s backslash commands to servers running PostgreSQL 9.2 or later (Tom Lane)

    Remove code that was only used when running with an older server. Commands that do not require any version-specific adjustments compared to 9.2 will still work.

10.12.1.3.8.2. linkend=»app-pgdump»>pg_dump
  1. Make pg_dump dump public schema ownership changes and security labels (Noah Misch)

  2. Improve performance of dumping databases with many objects (Tom Lane)

    This will also improve the performance of linkend=»pgupgrade»>pg_upgrade.

  3. Improve parallel pg_dump’s performance for tables with large TOAST tables (Tom Lane)

  4. Add dump/restore option –no-table-access-method to force restore to only use the default table access method (Justin Pryzby)

  5. Limit support of pg_dump and linkend=»app-pg-dumpall»>pg_dumpall to servers running PostgreSQL 9.2 or later (Tom Lane)

10.12.1.3.9. Server Applications

  1. Add new linkend=»app-pgbasebackup»>pg_basebackup option –target to control the base backup location (Robert Haas)

    The new options are server to write the backup locally and blackhole to discard the backup (for testing).

  2. Allow pg_basebackup to do server-side gzip, LZ4, and Zstandard compression and client-side LZ4 and Zstandard compression of base backup files (Dipesh Pandit, Jeevan Ladhe)

    Client-side gzip compression was already supported.

  3. Allow pg_basebackup to compress on the server side and decompress on the client side before storage (Dipesh Pandit)

    This is accomplished by specifying compression on the server side and plain output format.

  4. Allow pg_basebackup’s –compress option to control the compression location (server or client), compression method, and compression options (Michael Paquier, Robert Haas)

  5. Add the LZ4 compression method to linkend=»app-pgreceivewal»>pg_receivewal (Georgios Kokolatos)

    This is enabled via –compress=lz4 and requires binaries to be built using –with-lz4.

  6. Add additional capabilities to pg_receivewal’s –compress option (Georgios Kokolatos)

  7. Improve pg_receivewal’s ability to restart at the proper WAL location (Ronan Dunklau)

    Previously, pg_receivewal would start based on the WAL file stored in the local archive directory, or at the sending server’s current WAL flush location. With this change, if the sending server is running Postgres 15 or later, the local archive directory is empty, and a replication slot is specified, the replication slot’s restart point will be used.

  8. Add linkend=»app-pgrewind»>pg_rewind option –config-file to simplify use when server configuration files are stored outside the data directory (Gunnar Bluth)

10.12.1.3.9.1. linkend=»pgupgrade»>pg_upgrade
  1. Store pg_upgrade’s log and temporary files in a subdirectory of the new cluster called pg_upgrade_output.d (Justin Pryzby)

    Previously such files were left in the current directory, requiring manual cleanup. Now they are automatically removed on successful completion of pg_upgrade.

  2. Disable default status reporting during pg_upgrade operation if the output is not a terminal (Andres Freund)

    The status reporting output can be enabled for non-tty usage by using –verbose.

  3. Make pg_upgrade report all databases with invalid connection settings (Jeevan Ladhe)

    Previously only the first database with an invalid connection setting was reported.

  4. Make pg_upgrade preserve tablespace and database OIDs, as well as relation relfilenode numbers (Shruthi Gowda, Antonin Houska)

  5. Add a –no-sync option to pg_upgrade (Michael Paquier)

    This is recommended only for testing.

  6. Limit support of pg_upgrade to old servers running PostgreSQL 9.2 or later (Tom Lane)

10.12.1.3.9.2. linkend=»pgwaldump»>pg_waldump
  1. Allow pg_waldump output to be filtered by relation file node, block number, fork number, and full page images (David Christensen, Thomas Munro)

  2. Make pg_waldump report statistics before an interrupted exit (Bharath Rupireddy)

    For example, issuing a control-C in a terminal running pg_waldump –stats –follow will report the current statistics before exiting. This does not work on Windows.

  3. Improve descriptions of some transaction WAL records reported by pg_waldump (Masahiko Sawada, Michael Paquier)

  4. Allow pg_waldump to dump information about multiple resource managers (Heikki Linnakangas)

    This is enabled by specifying the –rmgr option multiple times.

10.12.1.3.10. Documentation

  1. Add documentation for linkend=»functions-info-catalog-table»>**pg_encoding_to_char()** and pg_char_to_encoding() (Ian Lawrence Barwick)

  2. Document the linkend=»functions-string-other»>**^@** starts-with operator (Tom Lane)

10.12.1.3.11. Source Code

  1. Add support for continuous integration testing using cirrus-ci (Andres Freund, Thomas Munro, Melanie Plageman)

  2. Add configure option linkend=»configure-options-features»>**–with-zstd** to enable Zstandard builds (Jeevan Ladhe, Robert Haas, Michael Paquier)

  3. Add an ABI identifier field to the magic block in loadable libraries, allowing non-community PostgreSQL distributions to identify libraries that are not compatible with other builds (Peter Eisentraut)

    An ABI field mismatch will generate an error at load time.

  4. Create a new linkend=»catalog-pg-type»>**pg_type.typcategory** value for «char» (Tom Lane)

    Some other internal-use-only types have also been assigned to this category.

  5. Add new protocol message linkend=»protocol-replication-base-backup»>**TARGET** to specify a new COPY method to be used for base backups (Robert Haas)

    linkend=»app-pgbasebackup»>pg_basebackup now uses this method.

  6. Add new protocol message linkend=»protocol-replication-base-backup»>**COMPRESSION** and COMPRESSION_DETAIL to specify the compression method and options (Robert Haas)

  7. Remove server support for old BASE_BACKUP command syntax and base backup protocol (Robert Haas)

  8. Add support for extensions to set custom backup targets (Robert Haas)

  9. Allow extensions to define custom WAL resource managers (Jeff Davis)

  10. Add function linkend=»functions-info-catalog-table»>**pg_settings_get_flags()** to get the flags of server variables (Justin Pryzby)

  11. On Windows, export all the server’s global variables using PGDLLIMPORT markers (Robert Haas)

    Previously, only specific variables were accessible to extensions on Windows.

  12. Require GNU make version 3.81 or later to build PostgreSQL (Tom Lane)

  13. Require OpenSSL to build the linkend=»pgcrypto»>pgcrypto extension (Peter Eisentraut)

  14. Require Perl version 5.8.3 or later (Dagfinn Ilmari Mannsåker)

  15. Require Python version 3.2 or later (Andres Freund)

10.12.1.3.12. Additional Modules

  1. Allow linkend=»amcheck»>amcheck to check sequences (Mark Dilger)

  2. Improve amcheck sanity checks for TOAST tables (Mark Dilger)

  3. Add new module linkend=»basebackup-to-shell»>basebackup_to_shell as an example of a custom backup target (Robert Haas)

  4. Add new module linkend=»basic-archive»>basic_archive as an example of performing archiving via a library (Nathan Bossart)

  5. Allow linkend=»btree-gist»>btree_gist indexes on boolean columns (Emre Hasegeli)

    These can be used for exclusion constraints.

  6. Fix linkend=»pageinspect»>pageinspect’s page_header() to handle 32-kilobyte page sizes (Quan Zongliang)

    Previously, improper negative values could be returned in certain cases.

  7. Add counters for temporary file block I/O to linkend=»pgstatstatements»>pg_stat_statements (Masahiko Sawada)

  8. Add JIT counters to pg_stat_statements (Magnus Hagander)

  9. Add new module linkend=»pgwalinspect»>pg_walinspect (Bharath Rupireddy)

    This gives SQL-level output similar to linkend=»pgwaldump»>pg_waldump.

  10. Indicate the permissive/enforcing state in linkend=»sepgsql»>sepgsql log messages (Dave Page)

10.12.1.3.12.1. linkend=»postgres-fdw»>postgres_fdw
  1. Allow postgres_fdw to push down CASE expressions (Alexander Pyhalov)

  2. Add server variable postgres_fdw.application_name to control the application name of postgres_fdw connections (Hayato Kuroda)

    Previously the remote session’s linkend=»guc-application-name»>**application_name** could only be set on the remote server or via a postgres_fdw connection specification. postgres_fdw.application_name supports some escape sequences for customization, making it easier to tell such connections apart on the remote server.

  3. Allow parallel commit on postgres_fdw servers (Etsuro Fujita)

    This is enabled with the CREATE SERVER option parallel_commit.

10.12.1.4. Acknowledgments

The following individuals (in alphabetical order) have contributed to this release as patch authors, committers, reviewers, testers, or reporters of issues.

Abhijit Menon-Sen Adam Brusselback Adam Mackler Adrian Ho Ahsan Hadi Ajin Cherian Alastair McKinley Aleksander Alekseev Ales Zeleny Alex Kingsborough Alex Kozhemyakin Alexander Korotkov Alexander Kukushkin Alexander Lakhin Alexander Nawratil Alexander Pyhalov Alexey Borzov Alexey Ermakov Aliaksandr Kalenik Álvaro Herrera Amit Kapila Amit Khandekar Amit Langote Amul Sul Anastasia Lubennikova Anders Kaseorg Andreas Dijkman Andreas Grob Andreas Seltenreich Andrei Zubkov Andres Freund Andrew Alsup Andrew Bille Andrew Dunstan Andrew Gierth Andrew Kesper Andrey Borodin Andrey Lepikhov Andrey Sokolov Andy Fan Anton Melnikov Anton Voloshin Antonin Houska Arjan van de Ven Arne Roland Arthur Zakirov Ashutosh Bapat Ashutosh Sharma Ashwin Agrawal Asif Rehman Asim Praveen Atsushi Torikoshi Aya Iwata Bauyrzhan Sakhariyev Benoit Lobréau Bernd Dorn Bertrand Drouvot Bharath Rupireddy Björn Harrtell Boris Kolpackov Boris Korzun Brad Nicholson Brar Piening Bruce Momjian Bruno da Silva Bryn Llewellyn Carl Sopchak Cary Huang Chapman Flack Chen Jiaoqian Chris Bandy Chris Lowder Christian Quest Christoph Berg Christoph Heiss Christophe Pettus Christopher Painter-Wakefield Claudio Freire Clemens Zeidler Corey Huinker Dag Lem Dagfinn Ilmari Mannsåker Dan Kubb Daniel Cherniy Daniel Gustafsson Daniel Polski Daniel Vérité Daniel Westermann Daniele Varrazzo Daniil Anisimov Danny Shemesh Darafei Praliaskouski Daria Lepikhova Dave Cramer Dave Page David Christensen David Fetter David G. Johnston David Rowley David Steele David Zhang Dean Rasheed Dian Fay Dilip Kumar Dipesh Pandit Dmitry Dolgov Dmitry Koval Dmitry Marakasov Dominique Devienne Dong Wook Drew DeVault Eduard Català Egor Chindyaskin Egor Rogov Ekaterina Kiryanova Elena Indrupskaya Elvis Pranskevichus Emmanuel Quincerot Emre Hasegeli Eric Mutta Erica Zhang Erik Rijkers Erki Eessaar Etsuro Fujita Euler Taveira Fabien Coelho Fabrice Chapuis Fabrice Fontaine Fabrízio de Royes Mello Feike Steenbergen Filip Gospodinov Florin Irion Floris Van Nee Frédéric Yhuel Gabriela Serventi Gaurab Dey Geoff Winkless Geoffrey Blake Georgios Kokolatos Gilles Darold Greg Nancarrow Greg Rychlewski Greg Sabino Mullane Greg Stark Gregory Smith Guillaume Lelarge Gunnar Bluth Gurjeet Singh Haiyang Wang Haiying Tang Hannu Krosing Hans Buschmann Hayato Kuroda Heath Lord Heikki Linnakangas Herwig Goemans Himanshu Upadhyaya Holly Roberts Hou Zhijie Hubert Lubaczewski Ian Barwick Ian Campbell Ibrar Ahmed Ildus Kurbangaliev Ilya Anfimov Itamar Gafni Jacob Champion Jaime Casanova Jakub Wartak James Coleman James Hilliard James Inform Jan Piotrowski Japin Li Jason Harvey Jason Kim Jean-Christophe Arnu Jeevan Ladhe Jeff Davis Jeff Janes Jehan-Guillaume de Rorthais Jelte Fennema Jeremy Evans Jeremy Schneider Jian Guo Jian He Jimmy Yih Jiri Fejfar Jitka Plesníková Joe Conway Joe Wildish Joel Jacobson Joey Bodoia John Naylor Jonathan Katz Josef Simanek Joseph Koshakow Josh Soref Joshua Brindle Juan José Santamaría Flecha Julien Rouhaud Julien Roze Junwang Zhao Jürgen Purtz Justin Pryzby Ken Kato Kevin Burke Kevin Grittner Kevin Humphreys Kevin McKibbin Kevin Sweet Kevin Zheng Klaudie Willis Konstantin Knizhnik Konstantina Skovola Kosei Masumura Kotaro Kawamoto Koyu Tanigawa Kuntal Ghosh Kyotaro Horiguchi Lars Kanis Lauren Fliksteen Laurent Hasson Laurenz Albe Leslie Lemaire Liam Bowen Lingjie Qiang Liu Huailing Louis Jachiet Lukas Fittl Ma Liangzhu Maciek Sakrejda Magnus Hagander Mahendra Singh Thalor Maksim Milyutin Marc Bachmann Marcin Krupowicz Marcus Gartner Marek Szuba Marina Polyakova Mario Emmenlauer Mark Dilger Mark Murawski Mark Wong Markus Wanner Markus Winand Martijn van Oosterhout Martin Jurca Martin Kalcher Martín Marqués Masahiko Sawada Masahiro Ikeda Masao Fujii Masaya Kawamoto Masayuki Hirose Matthias van de Meent Matthijs van der Vleuten Maxim Orlov Maxim Yablokov Melanie Plageman Michael Banck Michael Harris Michael J. Sullivan Michael Meskes Michael Mühlbeyer Michael Paquier Michael Powers Mike Fiedler Mike Oh Mikhail Kulagin Miles Delahunty Naoki Okano Nathan Bossart Nathan Long Nazir Bilal Yavuz Neha Sharma Neil Chen Nicola Contu Nicolas Lutic Nikhil Benesch Nikhil Shetty Nikhil Sontakke Nikita Glukhov Nikolai Berkoff Nikolay Samokhvalov Nikolay Shaplov Nitin Jadhav Noah Misch Noboru Saito Noriyoshi Shinoda Olaf Bohlen Olly Betts Onder Kalaci Oskar Stenberg Otto Kekalainen Paul Guo Paul Jungwirth Paul Martinez Pavan Deolasee Pavel Borisov Pavel Luzanov Pavel Stehule Peter Eisentraut Peter Geoghegan Peter Slavov Peter Smith Petr Jelínek Phil Florent Phil Krylov Pierre-Aurélien Georges Prabhat Sahu Quan Zongliang Rachel Heaton Rahila Syed Rajakavitha Kodhandapani Rajkumar Raghuwanshi Ranier Vilela Rei Kamigishi Reid Thompson Rémi Lapeyre Renan Soares Lopes Richard Guo Richard Wesley RKN Sai Krishna Robert Haas Robert Treat Roberto Mello Robins Tharakan Roger Mason Roman Zharkov Ronan Dunklau Rui Zhao Ryan Kelly Ryo Matsumura Ryohei Takahashi Sadhuprasad Patro Sait Talha Nisanci Sami Imseih Sandeep Thakkar Sebastian Kemper Sehrope Sarkuni Sergei Kornilov Sergei Shoulbakov Sergey Shinderuk Shay Rojansky Shenhao Wang Shi Yu Shinya Kato Shruthi Gowda Simon Perepelitsa Simon Riggs Sirisha Chamarthi Soumyadeep Chakraborty Stan Hu Stas Kelvich Stefen Hillman Stephen Frost Steve Chavez Sumanta Mukherjee Suraj Khamkar Suraj Kharage Sven Klemm Takamichi Osumi Takayuki Tsunakawa Takeshi Ideriha Tatsuhiro Nakamori Tatsuhito Kasahara Tatsuo Ishii Tatsuro Yamada Teja Mupparti Teodor Sigaev Thibaud Walkowiak Thom Brown Thomas McKay Thomas Munro Tim McNamara Timo Stolz Timur Khanjanov Tom Lane Tomas Barton Tomas Vondra Tony Reix Troy Frericks Tushar Ahuja Victor Wagner Victor Yegorov Vignesh C Vik Fearing Vincas Dargis Vitaly Burovoy Vitaly Voronov Vladimir Sitnikov Wang Ke Wei Sun Wei Wang Whale Song Will Mortensen Wolfgang Walther Yanliang Lei Yaoguang Chen Yogendra Suralkar YoungHwan Joo Yugo Nagata Yukun Wang Yura Sokolov Yusuke Egashira Yuzuko Hosoya Zhang Mingli Zhang Wenjie Zhihong Yu Zhiyong Wu