E.1. Release 11
Prev | Up | Appendix E. Release Notes | Home | Next

## E.1. Release 11

Release date: 2018-??-?? (CURRENT AS OF 2018-05-01)

### E.1.1. Overview

Major enhancements in PostgreSQL 11 include:

- Major improvements to partitioning:

  - Partitioning by a hash key

  - `UPDATE` statements that change a partition key now move affected rows to the appropriate partitions

  - Improved `SELECT` query performance due to enhanced partition elimination during query processing and execution

  - Support for `PRIMARY KEY`, `FOREIGN KEY`, indexes, and triggers on partitioned tables

- Improvements to parallelism:

  - Parallelized hash joins

  - Parallelized `CREATE INDEX` for B-tree indexes

  - Parallelized `CREATE TABLE .. AS`, `CREATE MATERIALIZED VIEW`, and certain queries using `UNION`

- SQL stored procedures, with support for embedded transactions

- JIT compilation of some SQL code, including support for fast evaluation of expressions

- Window functions now support all options shown in the SQL:2011 standard, including `RANGE `distance` PRECEDING/FOLLOWING`, `GROUPS` mode, and frame exclusion options

- Channel binding for SCRAM authentication, to prevent potential man-in-the-middle attacks on database connections

- Many other useful performance improvements, including making `ALTER TABLE .. ADD COLUMN` with a non-null column default faster

The above items are explained in more detail in the sections below.

### E.1.2. Migration to Version 11

A dump/restore using pg_dumpall, or use of pg_upgrade, is required for those wishing to migrate data from any previous release.

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

- Have pg_dump dump all aspects of a database (Haribabu Kommi)

  Previously database attributes like `GRANT`/`REVOKE` permissions and `ALTER DATABASE SET` and `ALTER ROLE IN DATABASE SET` variable settings were only dumped by pg_dumpall. Now `pg_dump --create` and `pg_restore --create` will restore all database aspects. `pg_dumpall -g` will now only output role and tablespace-related attributes. pg_dumpall's output (without `-g`) is unchanged.

  pg_dump and pg_restore, without `--create`, no longer dump/restore database comments and security labels.

  `pg_dumpall --clean` now restores the "postgres" and "template1" databases with the original locale and encoding settings.

  A restore of pg_dumpall will now create databases with their original locale and encoding, and will fail if the creation fails. Previously `CREATE DATABASE` would be dumped without such specifications if the database locale and encoding matched the old cluster's defaults.

  DID I GET EVERYTHING?

- Correct information schema column `tables`.`table_type` to return `FOREIGN` instead of `FOREIGN TABLE` (Peter Eisentraut)

  This new output matches the SQL standard.

- Change the ps process display labels for background workers to match the `pg_stat_activity`.`backend_type` labels (Peter Eisentraut)

- Prevent `to_number()` from consuming characters when the template separator does not match (Oliver Ford)

  Specifically, `SELECT to_number('1234', '9,999')` used to return `134`. It will now return `1234`. `L` and `TH` now only consume characters that are not digits, positive/negative signs, decimal points, and commas.

- Fix `to_date()`, `to_number()`, and `to_timestamp()` to skip a character for each template character (Tom Lane)

  Previously _bytes_ were skipped.

- Adjust the handling of backslashes inside double-quotes in template strings for `to_char()`, `to_number()`, and `to_timestamp()`.

  Such a backslash now escapes the character after it, particularly a double-quote or another backslash.

- Have libpq's `PQhost()` always return the actual connected host (Haribabu Kommi)

  Previously `PQhost()` often returned the supplied host parameters, which could contain several hosts. It will now also return the host's IP address if the host name was not supplied. The same is true of `PQport()`, which now returns the actual port number, not the multiple supplied port numbers.

- In the Extended Query Protocol, have `statement_timeout` apply to each Execute message, not to all commands before Sync (Tatsuo Ishii, Andres Freund)

- Remove `relhaspkey` column from system table `pg_class` (Peter Eisentraut)

  Applications needing to check for a primary key should consult `pg_index`.

- Replace system table `pg_proc`'s `proisagg` and `proiswindow` with `prokind` (Peter Eisentraut)

  This new column more clearly identifies functions, procedures, aggregates, and window functions.

- Cause large object permission checks to happen on large object open, `lo_open()`, not read/write (Tom Lane, Michael Paquier)

- Remove deprecated contrib/adminpack functions `pg_file_read()`, `pg_file_length()`, and `pg_logfile_rotate()` (Stephen Frost)

  These functions are now present by default. Old adminpack installs will continue to have access to these functions until they are updated via `ALTER EXTENSION ... UPDATE`.

- Honor the capitalization of double-quoted command options (Daniel Gustafsson)

  Previously index options names like ("FillFactor" = 50) were automatically lower-cased. This quoted capitalization will now generate an error.

- Remove server variable `replacement_sort_tuples` (Peter Geoghegan)

  Replacement sorts were determined to be no longer useful.

- Remove `WITH` clause in `CREATE FUNCTION` (Michael Paquier)

  PostgreSQL has long supported a more standard-compliant syntax for this capability.

- Consistently return `NaN` for `NaN` inputs to `power()` on older platforms (Tom Lane, Dang Minh Huong)

### E.1.3. Changes

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

#### E.1.3.1. Server

##### E.1.3.1.1. Partitioning

- Allow faster partition elimination during query processing (Amit Langote, David Rowley, Dilip Kumar)

  This speeds access to partitioned tables with many partitions.

- Allow partition elimination during query execution (David Rowley, Beena Emerson)

  Previously partition elimination could only happen at planning time, meaning many joins and prepared queries could not use partition elimination.

- Allow the creation of partitions based on hashing a key (Amul Sul)

- Allow updated rows to automatically move to new partitions based on the new row contents (Amit Khandekar)

- Allow partitioned tables to have a default partition (Jeevan Ladhe, Beena Emerson, Ashutosh Bapat, Rahila Syed, Robert Haas)

  The default partition can store rows that don't match any of the other defined partitions, and is searched accordingly.

- Allow `UNIQUE` indexes on partitioned tables if the partition key guarantees uniqueness (Álvaro Herrera, Amit Langote)

- Allow indexes on a partitioned table to be automatically created in any child partitions (Álvaro Herrera)

  The new command `ALTER INDEX ATTACH PARTITION` allows indexes to be attached to partitions. This does not behave as a global index since the contents are private to each index. WARN WHEN USING AN EXISTING INDEX?

- Allow foreign keys on partitioned tables (Álvaro Herrera)

- Allow `INSERT`, `UPDATE`, and `COPY` on partitioned tables to properly route rows to foreign partitions (Etsuro Fujita, Amit Langote)

  This is supported by postgres_fdw foreign tables.

- Allow `FOR EACH ROW` triggers on partitioned tables (Álvaro Herrera)

  Creation of a trigger on partitioned tables automatically creates triggers on all partition tables, and on newly-created ones. This also allows deferred unique constraints on partitioned tables.

- Allow equality joins between partitioned tables with identically partitioned child tables to join the child tables directly (Ashutosh Bapat)

  This feature is disabled by default but can be enabled by changing `enable_partitionwise_join`.

- Perform aggregation on each partition, and then merge the results (Jeevan Chalke, Ashutosh Bapat, Robert Haas)

  This feature is disabled by default but can be enabled by changing `enable_partitionwise_aggregate`.

- Allow postgres_fdw to push down aggregates to foreign tables that are partitions (Jeevan Chalke)

##### E.1.3.1.2. Parallel Queries

- Allow btree indexes to be built in parallel (Peter Geoghegan, Rushabh Lathia, Heikki Linnakangas)

- Allow hash joins to be performed in parallel using a shared hash table (Thomas Munro)

- Allow `UNION` to run each `SELECT` in parallel if the individual `SELECT`s cannot be parallelized (Amit Khandekar, Robert Haas, Amul Sul)

- Allow partition scans to more efficiently use parallel workers (Amit Khandekar, Robert Haas, Amul Sul)

- Allow `LIMIT` to be passed to parallel workers (Robert Haas, Tom Lane)

  This allows workers to reduce returned results and use targeted index scans.

- Allow single-evaluation queries, e.g. `WHERE` clause aggregate queries, and functions in the target list to be parallelized (Amit Kapila, Robert Haas)

- Add server option `parallel_leader_participation` to control if the leader executes subplans (Thomas Munro)

  The default is enabled, meaning the leader will execute subplans.

- Allow parallelization of commands `CREATE TABLE .. AS`, `SELECT INTO`, and `CREATE MATERIALIZED VIEW` (Haribabu Kommi)

- Improve performance of sequential scans with many parallel workers (David Rowley)

- Add reporting of parallel worker sort activity to `EXPLAIN` (Robert Haas, Tom Lane)

##### E.1.3.1.3. Indexes

- Allow indexes to `INCLUDE` columns that are not part of the unique constraint but are available for index-only scans (Anastasia Lubennikova, Alexander Korotkov, Teodor Sigaev)

  This is also useful for including columns that don't have btree support.

- Remember the highest btree index page to optimize future monotonically increasing index additions (Pavan Deolasee, Peter Geoghegan)

- Allow entire hash index pages to be scanned (Ashutosh Sharma)

  Previously for each hash index entry, we need to refind the scan position within the page. This cuts down on lock/unlock traffic.

- Add predicate locking for hash, GiST and GIN indexes (Shubham Barai)

  This reduces the likelihood of serialization conflicts. ACCURATE?

- Allow heap-only-tuple (HOT) updates for expression indexes when the values of the expressions are unchanged (Konstantin Knizhnik)

###### E.1.3.1.3.1. SP-Gist

- Add `TEXT` prefix operator ^@ which is supported by SP-GiST (Ildus Kurbangaliev)

  This is similar to using `LIKE` 'word%' with btree indexes, but is more efficient.

- Allow polygons to be indexed with SP-GiST (Nikita Glukhov, Alexander Korotkov)

- Allow SP-GiST to use lossy representation of leaf keys (Teodor Sigaev, Heikki Linnakangas, Alexander Korotkov, Nikita Glukhov)

##### E.1.3.1.4. Optimizer

- Improve the selection of the optimizer statistics' most-common-values (Jeff Janes, Dean Rasheed)

  Previously most-common-values (MCV) were chosen based on their significance compared to all column values. Now, MCV are chosen based on their significance compared to the non-MCV values. This improves the statistics for uniform (fewer) and non-uniform (more) distributions.

- Improve selectivity estimates for >= and <= when the constants are not common values (Tom Lane)

  Previously such cases used the same selectivity as > and <, respectively. This change is particularly useful for `BETWEEN` with small ranges.

- Optimize var = var to var `IS NOT NULL` where equivalent (Tom Lane)

  This leads to better selectivity estimates.

- Improve row count optimizer estimates for `EXISTS` and `NOT EXISTS` queries (Tom Lane)

- Add optimizer selectivity costs for `HAVING` clauses (Tom Lane)

##### E.1.3.1.5. General Performance

- Add Just-In-Time (JIT) compilation of some parts of query plans to improve execution speed (Andres Freund)

- Allow bitmap scans to perform index-only scans when possible (Alexander Kuzmenkov)

- Update the free space map during vacuum (Claudio Freire)

  This allows free space to be reused more quickly.

- Allow vacuum to avoid unnecessary index scans (Masahiko Sawada, Alexander Korotkov)

- Improve performance of committing multiple concurrent transactions (Amit Kapila)

- Reduce memory usage for queries using set-returning functions in their target lists (Andres Freund)

- Allow postgres_fdw to push `UPDATE`s and `DELETE`s using joins to foreign servers (Etsuro Fujita)

  Previously only non-join `UPDATE`s and `DELETE`s were pushed.

##### E.1.3.1.6. Monitoring

- Show memory usage in `log_statement_stats`, `log_parser_stats`, `log_planner_stats`, `log_executor_stats` (Justin Pryzby, Peter Eisentraut)

- Add `pg_stat_activity`.`backend_type` now shows the type of background worker (Peter Eisentraut)

  Add `bgw_type` to the background worker C structure (Peter Eisentraut)

  This is displayed to the user in `pg_stat_activity`.`backend_type` and ps output.

- Have `log_autovacuum_min_duration` log skipped tables that are concurrently being dropped (Nathan Bossart)

###### E.1.3.1.6.1. Information Schema

- Add information_schema columns related to table constraints and triggers (Peter Eisentraut)

  Specifically, `table_constraints`.`enforced`, `triggers`.`action_order`, `triggers`.`action_reference_old_table`, and `triggers`.`action_reference_new_table`.

##### E.1.3.1.7. Authentication

- Add libpq option to support channel binding when using SCRAM authentication (Michael Paquier)

  While SCRAM always prevents the replay of transmitted hashed passwords in a later session, SCRAM with channel binding also prevents man-in-the-middle attacks. The options are `scram_channel_binding=tls-unique` and `scram_channel_binding=tls-server-end-point`.

- Allow the server to specify more complex LDAP specifications in search+bind mode (Thomas Munro)

  Specifically, "ldapsearchfilter" allows pattern matching using combinations of LDAP attributes.

- Allow LDAP authentication to use ldaps (Thomas Munro)

  We already supported LDAP over TLS by using ldaptls=1. This new TLS LDAP method of encrypted LDAP is enabled with ldapscheme=ldaps or ldapurl=ldaps://.

- Improve LDAP logging of errors (Thomas Munro)

##### E.1.3.1.8. Permissions

- Add default roles which control file system access (Stephen Frost)

  Specifically, the new roles are: `pg_read_server_files`, `pg_write_server_files`, `pg_execute_server_program`. These roles now also control who can use `COPY` and extension file_fdw. Previously only superusers could use these functions, and that is still the default behavior.

- Allow access to file system functions to be controlled by `GRANT`/`REVOKE` permissions, rather than superuser checks (Stephen Frost)

  Specifically, these functions were modified: `pg_ls_dir()`, `pg_read_file()`, `pg_read_binary_file()`, `pg_stat_file()`.

- Use `GRANT`/`REVOKE` to control access to `lo_import()` and `lo_export()` (Michael Paquier, Tom Lane)

  Previously, superusers were exclusively granted access to these functions.

  Compile-time option `ALLOW_DANGEROUS_LO_FUNCTIONS` has been removed.

- Use view owner not session owner when preventing non-password access to postgres_fdw tables (Robert Haas)

  PostgreSQL only allows superusers to access postgres_fdw tables without passwords, e.g. via `peer`. Previously the session owner had to be a superuser to allow such access; now the view owner is checked instead.

- Fix invalid locking permission check in `SELECT FOR UPDATE` on views (Tom Lane)

##### E.1.3.1.9. Server Configuration

- Add server setting `ssl_passphrase_command` to allow supplying of the passphrase for SSL key files (Peter Eisentraut)

  Also add `ssl_passphrase_command_supports_reload` to specify whether the the SSL configuration should be reloaded and `ssl_passphrase_command` called during a server configuration reload.

- Add storage parameter `toast_tuple_target` to control the minimum length before TOAST storage will be considered for new rows (Simon Riggs)

  The default TOAST threshold has not been changed.

- Allow server options related to memory and file sizes to be specified as number of bytes (Beena Emerson)

  The new unit is "B". This is in addition to "kB", "MB", "GB" and "TB".

##### E.1.3.1.10. Write-Ahead Log (WAL)

- Allow the WAL file size to be set via initdb (Beena Emerson)

  Previously the 16MB default could only be changed at compile time.

- No longer retain WAL that spans two checkpoints (Simon Riggs)

  The retention of WAL records for only one checkpoint is required.

- Fill the unused portion of force-switched WAL segment files with zeros for improved compressibility (Chapman Flack)

#### E.1.3.2. Base Backup and Streaming Replication

- Replicate `TRUNCATE` activity when using logical replication (Simon Riggs, Marco Nenciarini, Peter Eisentraut)

- Pass prepared transaction information to logical replication subscribers (Nikhil Sontakke, Stas Kelvich)

- Exclude unlogged tables, temporary tables, and `pg_internal.init` files from streaming base backups (David Steele)

  There is no need to copy such files.

- Allow heap pages checksums to be checked during streaming base backup (Michael Banck)

- Allow replication slots to be advanced programmatically, rather than be consumed by subscribers (Petr Jelinek)

  This allows efficient advancement replication slots when the contents do not need to be consumed. This is performed by `pg_replication_slot_advance()`.

- Add timeline information to the `backup_label` file (Michael Paquier)

  Also add a check that the WAL timeline matches the `backup_label` file's timeline.

- Add host and port connection information to the `pg_stat_wal_receiver` system view (Haribabu Kommi)

#### E.1.3.3. Window Functions

- Add window function features to complete SQL:2011 compliance (Oliver Ford, Tom Lane)

  Specifically, allow `RANGE` mode to use `PRECEDING` and `FOLLOWING` to specify peer groups with values plus or minus the specified offset. Add `GROUPS` mode to include plus or minus the number of peer groups. Frame exclusion syntax was also added.

#### E.1.3.4. Utility Commands

- Allow `ALTER TABLE` to add a column with a non-null default without a table rewrite (Andrew Dunstan, Serge Rielau)

- Allow views to be locked by locking the underlying tables (Yugo Nagata)

- Allow `ALTER INDEX` to set statistics-gathering targets for expression indexes (Alexander Korotkov, Adrien Nayrat)

  In psql, \d+ now shows the statistics target for indexes.

- Allow multiple tables to be specified in one `VACUUM` or `ANALYZE` command (Nathan Bossart)

  Also, if any table mentioned in `VACUUM` uses a column list, then the `ANALYZE` keyword must be supplied; previously, `ANALYZE` was implied in such cases.

- Add parenthesized options syntax to `ANALYZE` (Nathan Bossart)

  This is similar to the syntax supported by `VACUUM`.

- Add `CREATE AGGREGATE` option to specify the behavior of the aggregate finalization function (Tom Lane)

  This is useful for allowing aggregate functions to be optimized and to work as window functions.

#### E.1.3.5. Data Types

- Allow the creation of arrays of domains (Tom Lane)

  This also allows `array_agg()` to be used on domains.

- Support domains over composite types (Tom Lane)

  Also allow PL/Perl, PL/Python, and PL/Tcl to handle composite-domain function arguments and results. Also improve PL/Python domain handling.

- Add casts from jsonb scalars to numeric and boolean data types (Anastasia Lubennikova)

#### E.1.3.6. Functions

- Add SHA-2 family of hash functions (Peter Eisentraut)

  Specifically, `sha224()`, `sha256()`, `sha384()`, `sha512()` were added.

- Add support for 64-bit non-cryptographic hash functions (Robert Haas, Amul Sul)

- Allow `to_char()` and `to_timestamp()` to specify the time zone's hours and minutes from UTC (Nikita Glukhov, Andrew Dunstan)

  This is done with format specifications `TZH` and `TZM`.

- Improve the speed of aggregate computations (Andres Freund)

- Add text search function `websearch_to_tsquery()` that supports a query syntax similar to that used by web search engines (Victor Drobny, Dmitry Ivanov)

- Add function `json(b)_to_tsvector()` to create a text search query for matching `JSON`/`JSONB` values (Dmitry Dolgov)

#### E.1.3.7. Server-Side Languages

- Add SQL procedures, which can start and commit their own transactions (Peter Eisentraut)

  They are created with the new `CREATE PROCEDURE` command and invoked via `CALL`. The new `ALTER`/`DROP ROUTINE` commands allows altering/dropping of procedures, functions, and aggregates.

- Add transaction control to PL/pgSQL, PL/Perl, PL/Python, PL/Tcl, and SPI server-side languages (Peter Eisentraut)

  Transaction control is only available to top-transaction-level `CALL`s or in nested PL/pgSQL DO and `CALL` blocks that only contain other PL/pgSQL `DO` and `CALL` blocks. ACCURATE?

- Add the ability to define PL/pgSQL record types as not null, constant, or with initial values (Tom Lane)

- Allow PL/pgSQL to handle changes to composite types (e.g. record, row) that happen between the first and later function executions in the same session (Tom Lane)

  Previously such circumstances generated errors.

- Add extension jsonb_plpython to transform `JSONB` to/from PL/Python types (Anthony Bykov)

- Add extension jsonb_plperl to transform `JSONB` to/from PL/Perl types (Anthony Bykov)

#### E.1.3.8. Client Interfaces

- Change libpq to disable compression by default (Peter Eisentraut)

  Compression is already disabled in modern OpenSSL versions and the libpq setting had no effect in that case.

- Add `DO CONTINUE` action to the `ECPG WHENEVER` statement (Vinayak Pokale)

  This generates a C 'continue' statement, causing a return to the top of the contained loop when the specified condition occurs.

- Add ecpg mode to enable Oracle Pro*C handling of char arrays.

  This mode is enabled with `-C`.

#### E.1.3.9. Client Applications

##### E.1.3.9.1. psql

- Add psql command \gdesc to display the column names and types of the query output (Pavel Stehule)

- Add psql variables to report query activity and errors (Fabien Coelho)

  Specifically, the new variables are `ERROR`, `SQLSTATE`, `ROW_COUNT`, `LAST_ERROR_MESSAGE`, and `LAST_ERROR_SQLSTATE`.

- Allow psql to test for the existence of a variable (Fabien Coelho)

  Specifically , the syntax `:{?variable_name}` allows a variable's existence to be tested in an \if statement.

- Add `PSQL_PAGER` to control psql's pager (Pavel Stehule)

  This allows psql's default pager to be specified as a separate environment variable from the pager for other applications. `PAGER` is still honored if `PSQL_PAGER` is not set.

- Have psql \d+ always show the partition information (Amit Langote, Ashutosh Bapat)

  Previously partition information would not be displayed for a partitioned table if it had no partitions. Also indicate which partitions are themselves partitioned.

- Have psql report the proper user name before the password prompt (Tom Lane)

  Previously, combinations of `-U` and a user name embedded in a URI caused incorrect reporting. Also suppress the user name before the password prompt when `--password` is specified.

- Allow `quit` and `exit` to exit psql when used in an empty buffer (Bruce Momjian)

  Also add hints of how to exit when `quit` and `exit` are used alone on a line in a non-empty buffer. Add a similar hint for `help`.

- Have psql hint at using control-D when `\q` is entered alone on a line but ignored (Bruce Momjian)

  For example, `\q` does not exit when supplied in character strings.

- Improve tab-completion for `ALTER INDEX RESET`/`SET` (Masahiko Sawada)

- Add infrastructure to allow psql to customize tab completion queries based on the server version (Tom Lane)

  Previously tab completion queries could fail.

##### E.1.3.9.2. pgbench

- Add pgbench expressions support for NULLs, booleans, and some functions and operators (Fabien Coelho)

- Add `\if` conditional support to pgbench (Fabien Coelho)

- Allow the use of non-ASCII characters in pgbench variable names (Fabien Coelho)

- Add pgbench option `--init-steps` to control the initialization steps performed (Masahiko Sawada)

- Add an approximated Zipfian-distributed random generator to pgbench (Alik Khilazhev)

- Allow the random seed to be set in pgbench (Fabien Coelho)

- Allow pgbench to do exponentiation with `pow()` and `power()` (Raúl Marín Rodríguez)

- Add hashing functions to pgbench (Ildar Musin)

- Make pgbench statistics more accurate when using `--latency-limit` and `--rate` (Fabien Coelho)

#### E.1.3.10. Server Applications

- Add an option to pg_basebackup that creates a named replication slot (Michael Banck)

  The option `--create-slot` creates the named replication slot (`--slot`) when the WAL streaming method (`--wal-method=stream`) is used.

  IS IT CLEAR FROM THE DOCS THAT THE REPLICATION SLOT IS NOT TEMPORARY?

- Allow initdb to set group read access to the data directory (David Steele)

  This is accomplished with the initdb `--allow-group-access` flag. Administrators can also set group permissions on the empty data directory before running initdb. Server variable `data_directory_mode` allows reading of data directory group permissions.

- Add pg_verify_checksums tool to verify database checksums while offline (Magnus Hagander)

- Allow pg_resetwal to change the WAL segment size via `--wal-segsize` (Nathan Bossart)

- Add long options to pg_resetwal and pg_controldata (Nathan Bossart, Peter Eisentraut)

- Add pg_receivewal option `--no-sync` to prevent synchronous WAL writes, for testing (Michael Paquier)

- Add pg_receivewal option `--endpos` to specify when WAL receiving should stop (Michael Paquier)

- Allow pg_ctl to send the `SIGKILL` signal to processes (Andres Freund)

  This was originally unsupported due to concerns over its misuse.

- Reduce the number of files copied by pg_rewind (Michael Paquier)

- Prevent pg_rewind from running as `root` (Michael Paquier)

##### E.1.3.10.1. pg_dump, pg_dumpall, pg_restore

- Add pg_dumpall option `--encoding` to control encoding (Michael Paquier)

  pg_dump already had this option.

- Add pg_dump option `--load-via-partition-root` to force loading of data into the partition's root table, rather than the original partitions (Rushabh Lathia)

  This is useful if the system to be loaded has different collation definitions or endianness, requiring the rows to be stored in different partitions.

- Add an option to suppress dumping and restoring comments (Robins Tharakan)

  The new pg_dump, pg_dumpall, and pg_restore option is `--no-comments`.

#### E.1.3.11. Source Code

- Add support for large pages on Windows (Takayuki Tsunakawa, Thomas Munro)

  This is controlled by the huge_pages configuration parameter.

- Add support for ARMv8 hardware CRC calculations (Yuqi Gu, Heikki Linnakangas, Thomas Munro)

- Convert documentation to DocBook XML (Peter Eisentraut, Alexander Lakhin, Jürgen Purtz)

  The file names still use an `sgml` extension for compatibility with back branches.

- Overhaul the way system tables are defined for bootstrap use (John Naylor)

- Allow background workers to attach to databases that normally disallow connections (Magnus Hagander)

- Speed up lookups of builtin function names matching oids (Andres Freund)

  The previous binary search now uses a lookup array.

- Speed up construction of query results (Andres Freund)

- Improve access speed to system caches (Andres Freund)

- Add a generational memory allocator which is optimized for serial allocation/deallocation (Tomas Vondra)

  This reduces memory usage for logical decoding.

- Make the computation of system column `pg_class`.`reltuples` consistent (Tomas Vondra)

- Update to use perltidy version `20170521` (Tom Lane)

#### E.1.3.12. Additional Modules

- Allow extension pg_prewarm to restore the previous shared buffer contents on startup (Mithun Cy, Robert Haas)

  This is accomplished by having pg_prewarm store the shared buffer relation/offset values to disk occasionally during server operation and shutdown.

- Add pgtrgm function `strict_word_similarity()` to compute the similarity of whole words (Alexander Korotkov)

  The function `word_similarity()` already existed for this purpose, but it was designed to find similar parts of words, while `strict_word_similarity()` computes the similarity to whole words.

- Allow creation of indexes on citext extension columns that can be used by `LIKE` comparisons (Alexey Chernyshov)

  Specifically, indexes must be created using the `citext_pattern_ops` operator class.

- Allow btree_gin to index `bool`, `bpchar`, `name` and `uuid` data types (Matheus Oliveira)

- Allow cube and seg extensions using GiST indexes to perform index-only scans (Andrey Borodin)

- Allow retrieval of negative cube coordinates using the ~> operator (Alexander Korotkov)

  This is useful for KNN-GiST searches. HOW?

- Add Vietnamese letter detection to the unaccent extension (Dang Minh Huong, Michael Paquier)

- Enhance amcheck to check that each heap tuple has an index entry (Peter Geoghegan)

- Have adminpack use the new default file system access roles (Stephen Frost)

  Previously only superusers could call adminpack functions; now role permissions are checked.

- Increase `pg_stat_statement`'s query id to 64 bits (Robert Haas)

  This greatly reduces the chance of query id hash collisions. The query id can now potentially display as a negative value.

- Install `errcodes.txt` to provide access to the error codes reported by PostgreSQL (Thomas Munro)

- Prevent extensions from creating custom server variables that take a quoted list of values (Tom Lane)

  This was never intended to be supported.

- Remove `contrib/start-scripts/osx` since they are no longer recommended (Tom Lane)

- Remove extension chkpass (Peter Eisentraut)

  This extension no longer served as a usable security tool or example of how to write an extension.

### E.1.4. Acknowledgments

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

XXX

Prev | Up | Next
Appendix E. Release Notes | Home | E.2. Release 10.4