PostgreSQL 19 New Features
PostgreSQL 19 New Features
WITH EXAMPLES · ENGLISH SOURCE EDITION
Explore the features, SQL examples, and compatibility changes documented by Noriyoshi Shinoda.
This book describes the Beta 1 source document. Its examples and compatibility notes reflect that snapshot.
Contents
Reference indexes
The opening chapter includes the first numbered table, Table 1. The indexes below collect the book’s other native numbered components.
Tables
- Table 1 — Version
- Table 2 — Examples of notation
- Table 3 — Syntax rules
- Table 4 — Add system catalogs and views
- Table 5 — System catalogs/views with additional columns
- Table 6 — Vues within the pg_catalog schema where columns have been deleted
- Table 7 — Views in the added information_schema schema
- Table 8 — System catalogs/views that had their content changed
- Table 9 — Structure of the pg_dsm_registry_allocations view
- Table 10 — Structure of the pg_stat_lock view
- Table 11 — Structure of the pg_stat_progress_data_checksums view
- Table 12 — Structure of the pg_stat_progress_repack view
- Table 13 — Structure of the pg_stat_recovery view
- Table 14 — Contents of the pg_hosts.conf file
- Table 15 — Added API names
- Table 16 — Parameters related to I/O workers
- Table 17 — Parameters related to the score
- Table 18 — Structure of the pg_stat_autovacuum_scores view
- Table 19 — Added parameters
- Table 20 — Added Wait Events
- Table 21 — Output logs
- Table 22 — Output logs
- Table 23 — Types of objects that can be created at the same time
- Table 24 — Options for the REPACK statement
- Table 25 — MODE Option Settings
- Table 26 — Return value of the WAIT FOR LSN statement
- Table 27 — Available options
- Table 28 — Return value of the pg_get_multixact_stats function
- Table 29 — Added string methods
- Table 30 — Added Parameters
- Table 31 — Changed Parameters
- Table 32 — String for specifying the process
- Table 33 — Parameters whose default values have been changed
- Table 34 — Removed Parameters
- Table 35 — Format specification
- Table 36 — Setting the %i substitution variable
- Table 37 — Added Views
- Table 38 — Added Functions
- Table 39 — Typical "advice" parameter settings
- Table 40 — 追加されたパラメーター
- Table 41 — Added Functions
- Table 42 — Added Parameters
- Table 43 — Added Columns
- Table 44 — Added extension modules
Examples
- Example 1 — Transaction Round Warning Log Message
- Example 2 — LSN Notation
- Example 3 — Changes to the standard_conforming_strings parameter
- Example 4 — Execute ALTER DATABASE/USER RESET statement
- Example 5 — Warning when using MD5 authentication
- Example 6 — PostgreSQL 18 Output Formats
- Example 7 — PostgreSQL 19 Output Formats
- Example 8 — Specifying the ON CONFLICT clause and operator classes
- Example 9 — PostgreSQL 18 Output Formats
- Example 10 — PostgreSQL 19 Output Formats
- Example 11 — WHERE clauses using system columns
- Example 12 — PostgreSQL 18 Output
- Example 13 — PostgreSQL 19 Output
- Example 14 — Querying the pg_dsm_registry_allocations view
- Example 15 — Querying of the pg_stat_lock view
- Example 16 — Querying of the pg_stat_progress_data_checksums view
- Example 17 — Querying of the pg_stat_progress_repack view
- Example 18 — Querying of the pg_stat_recovery view
- Example 19 — Creating a publication that includes a sequence
- Example 20 — Create a subscription
- Example 21 — Synchronization of sequence values
- Example 22 — Specifying the SERVER clause
- Example 23 — Specifying the exception table
- Example 24 — Setting the retain_dead_tuples option
- Example 25 — Setting the max_retention_duration option
- Example 26 — Querying the pg_stat_replication_slots view
- Example 27 — Automatic Update of WAL Output Level
- Example 28 — Merging Partitions
- Example 29 — Partition merge failed
- Example 30 — Splitting the partition
- Example 31 — Creating a Property Graph
- Example 32 — Querying PROPERTY GRAPH
- Example 33 — Dynamic Modification of Checksum Settings
- Example 34 — Permissions for large objects
- Example 35 — Connection string servicefile
- Example 36 — Automatic VACUUM Log
- Example 37 — Querying the pg_stat_autovacuum_scores view
- Example 38 — Automatic ANALYZE Log
- Example 39 — OAuth settings in the pg_hba.conf file
- Example 40 — Executing the ALTER PUBLICATION statement
- Example 41 — Specifying the REFRESH SEQUENCES clause
- Example 42 — Altering Virtual Columns with CHECK Constraints
- Example 43 — Setting the ENFORCED clause for CHECK constraints
- Example 44 — Configuring the number of parallel workers for automatic VACUUM
- Example 45 — MODE option
- Example 46 — FLUSH_UNLOGGED option
- Example 47 — ON_ERROR option
- Example 48 — Specifying the partition table
- Example 49 — Specifying the number of header rows
- Example 50 — Output to JSON format
- Example 51 — Specifying the FOR ALL SEQUENCES clause
- Example 52 — Add a table to the publication
- Example 53 — The CREATE SCHEMA Statement and Creating Objects
- Example 54 — Creating Extended Statistics for Virtual Generated Columns
- Example 55 — Tuples before the update
- Example 56 — Tuples after update
- Example 57 — Executing an EXPLAIN (IO) statement
- Example 58 — Outputting Memoize Estimate Information
- Example 59 — Output of FPI byte information
- Example 60 — PostgreSQL 19 Output
- Example 61 — PostgreSQL 18 Output
- Example 62 — Specifying the GRANTED BY clause
- Example 63 — INSERT ON CONFLICT DO SELECT statement
- Example 64 — Executing the REPACK statement
- Example 65 — Specifying the GROUP BY ALL clause
- Example 66 — GROUPING SETS and Subqueries
- Example 67 — Specifying NULL values in the SET statement
- Example 68 — Memory Information
- Example 69 — Parallel Worker Information
- Example 70 — Executing the WAIT FOR LSN statement
- Example 71 — Specifying the IGNORE NULLS clause and the RESPECT NULLS clause
- Example 72 — Base64 URL encoding and Base32 hex encoding
- Example 73 — Execution of the error_on_null function
- Example 74 — Variations of the random function
- Example 75 — The range_minus_multi function and the multirange_minus_multi function
- Example 76 — Executing the tid_block and tid_offset functions
- Example 77 — Executing the width_bucket function
- Example 78 — Retrieving DDL for a database
- Example 79 — Executing of the pg_clear_extended_stats
- Example 80 — Execution of the pg_get_multixact_stats function
- Example 81 — Executing of the pg_get_sequence_data function
- Example 82 — Executing of the pg_get_publication_tables function
- Example 83 — Definition of the pg_replication_origin_session_setup function
- Example 84 — Executing of the pg_restore_extended_stats function
- Example 85 — Executing the newly added jsonpath string method
- Example 86 — IS JSON Predicate for the Domain
- Example 87 — Querying by regdatabase data type
- Example 88 — Data type oid8
- Example 89 — Data type conversion between UUID and BYTEA
- Example 90 — GiST indexes for inet and cidr types
- Example 91 — Using reserved keywords as variable names
- Example 92 — PostgreSQL 18 Execution Plan
- Example 93 — PostgreSQL 19 Execution Plan
- Example 94 — PostgreSQL 18 Execution Plan
- Example 95 — PostgreSQL 19 Execution Plan
- Example 96 — PostgreSQL 18 Execution Plan
- Example 97 — PostgreSQL 19 Execution Plan
- Example 98 — PostgreSQL 18 Execution Plan
- Example 99 — PostgreSQL 19 Execution Plan
- Example 100 — PostgreSQL 18 Execution Plan
- Example 101 — PostgreSQL 19 Execution Plan
- Example 102 — PostgreSQL 18 Execution Plan
- Example 103 — PostgreSQL 19 Execution Plan
- Example 104 — PostgreSQL 18 Execution Plan
- Example 105 — PostgreSQL 19 Execution Plan
- Example 106 — PostgreSQL 19 Execution Plan
- Example 107 — Password Expiration Warning
- Example 108 — Changing the log_min_messages parameter
- Example 109 — Executing the oid2name command
- Example 110 — Executing pg_archivecleanup command with dry-run mode
- Example 111 — Specifying the log output directory
- Example 112 — Parameter file after executing the pg_createsubscriber command
- Example 113 — Dump of extended statistics
- Example 114 — Dump in gzip format
- Example 115 — Specifying the --no-globals option
- Example 116 — The pg_verifybackup command for tar-format backups
- Example 117 — The pg_waldump command for tar-format backups
- Example 118 — Displaying the SERVICEFILE variable
- Example 119 — Changing PROMPT1 variables
- Example 120 — Changing PROMPT1 variables
- Example 121 — Outputting BOOLEAN values
- Example 122 — Comment output
- Example 123 — Comment output
- Example 124 — Specifying the --dry-run option
- Example 125 — Specifying the log_extension_options option
- Example 126 — Specifying the log_io option
- Example 127 — Reading the CSV file with a two-line header
- Example 128 — Executing of the pg_buffercache_mark_dirty_all function
- Example 129 — Verifying the Method for Modifying the Execution Plan
- Example 130 — Configure Execution Plan Changes
- Example 131 — Preparing pg_stash_advice module
- Example 132 — Creating and Configuring a Advice Stash
- Example 133 — Checking the Query ID
- Example 134 — Specify advice
- Example 135 — Check the Execution Plan
- Example 136 — Number of Execution Plans Executed
- Example 137 — Constancy of FETCH Statements
- Example 138 — Specifying the restore_stats option
- Example 139 — SQL statement to execute
- Example 140 — PostgreSQL 18 Execution Plan
- Example 141 — PostgreSQL 19 Execution Plan
Figures
Source edition
The source chapter order, wording, examples, and publication credits are retained. PDF page markers link the reading edition to the original document. Source identity and coverage · About the collection
1 About This Document
PDF page 5
1.1 Purpose
The purpose of this document is to provide information about the major new features of open-source RDBMS PostgreSQL 19 Beta 1 (19.0).
1.2 Audience
This document is written for engineers who already know PostgreSQL, such as installation, basic management, etc.
1.3 Scope
This document describes the major differences between PostgreSQL 18 (18.4) and PostgreSQL 19 Beta 1 (19.0). As a general rule, this document examines the features of behavior change. This document does not describe and verify all new features. In particular, the following new features are not included.
Bugfix
Performance improvement by changing internal behavior
Improvement of regression test
Operability improvement by the psql command tab input
Improvement of the pgbench command
Improvement of the documentation, modify typos in the source code
Refactoring without a change in behavior
1.4 Software Version
The contents of this document have been verified for the following versions and platforms.
PDF page 6
| Software | Version |
|---|---|
| PostgreSQL | PostgreSQL 18.4 (for comparison) PostgreSQL 19 Beta 1 (19.0) (2026/06/01 20:05:06) |
| Operating System | Red Hat Enterprise Linux 9 Update 5 (x86-64) |
| Configure options | –with-ssl=openssl –with-lz4 –with-zstd –with-llvm –with-libxml –enable-injection-points –with-libnuma –with-liburing |
1.5 The Question, Comment, and Responsibility
The contents of this document are not an official opinion of PostgreSQL Global Development Group. The author and affiliation company do not take any responsibility for the problem caused by the mistake of contents. If you have any comments for this document, please contact Noriyoshi Shinoda (noriyoshi.shinoda@gmail.com).
1.6 Notation
This document contains examples of the execution of the command or SQL statement. Execution examples are described according to the following rules:
| Notation | Description |
|---|---|
| # | Shell prompt for Linux root user. |
| $ | Shell prompt for Linux general user. |
| Bold | The user input string. |
| postgres=# | The psql command prompt used by PostgreSQL users with the SUPERUSER attribute. |
| postgres=> | The psql command prompt used by PostgreSQL users without the SUPERUSER attribute. |
| Underline | Important output items. |
| «PASSWORD» | Replaced by password string. |
| … | Indicates that it is omitted. |
The syntax is described in the following rules:
PDF page 7
| Notation | Description |
|---|---|
| Italic | Replaced by the name of the object which users use, or the other syntax. |
| [ ] | Indicate that it can be omitted. |
| { A | B } | Indicate that it is possible to select A or B. |
| … | General syntax. It is the same as the previous version. |
2 New Features Summary
PDF page 8
More than 200 new features have been added to PostgreSQL 19. This chapter provides an overview of typical new features and benefits. Details of the new features will be explained in “3. New Feature Detail”.
2.1 Improvements to adapt to large scale environments
The following features have been added that can be applied to large scale environments:
Splitting and Merging Partitions
The feature to merge multiple partitions and split a single partition has been implemented for a partitioned tables.
Dynamic Table Configuration Changes
It is now possible to modify the evaluation method for virtual columns and the ENFORCED setting for CHECK constraints using the ALTER TABLE statement.
Use of Parallel Workers in Automatic VACUUM
In previous versions, parallel workers were not used during automatic VACUUM. In PostgreSQL 19, automatic VACUUM now supports parallel processing.
2.2 Improved reliability
PostgreSQL 19 implements the following enhancements to improve reliability.
Addition of Output Formats for the pg_dumpall Command
The pg_dumpall command now supports output formats other than text. If a format other than text is selected, the restore operation uses the pg_restore command.
SSL/SNI Support
PostgreSQL server-side support for SSL/SNI has been added. The pg_hosts.conf file is now available for configuring SNI settings.
PDF page 9
2.3 Improved maintainability
The following features that can improve operability have been added.
Sequence Replication and Excepted Tables
Sequence replication is now supported in logical replication environments. it is now possible to specify tables that are excepted from replication on the publication side.
REPACK Statement
The REPACK statement has been added to execute VACUUM FULL and CLUSTER statements simultaneously.
2.4 Improvements in Programming
The following features have been added to SQL statements.
SQL Property Graph
PROPERTY GRAPH objects, which execute graph queries, can now be created. The GRAPH_TABLE function is provided for PROPERTY GRAPH queries.
Enhancement to the INSERT Statement
The DO SELECT clause can now be specified in the INSERT ON CONFLICT statement.
Enhancement to the UPDATE / DELETE Statements
The ON PORTION OF clause, which enables partial updates of the range, is now supported in UPDATE and DELETE statements.
GROUP BY ALL Clause
The GROUP BY ALL clause, which executes GROUP BY processing on all output columns, is now supported.
New Contrib Modules
The Contrib modules pg_plan_advice and pg_stash_advice, which control execution plans, have been added.
PDF page 10
2.5 Incompatibility
In PostgreSQL 19, the following specifications have been changed from PostgreSQL 18.
2.5.1 Support Information
PostgreSQL 19 changes the supported versions for the following platforms and tools The changes in component support versions required to build PostgreSQL 19 are as follows.
Meson 0.57.2 or higher [f039c22]
gcc 4.7 or higher [4fbe015]
C11 standard [f5e0186]
Visual Studio 2019 or higher [8fd9bb1] The following components are now supported in PostgreSQL 19.
Tcl 9 support added [32a2aa7] PostgreSQL 19 has restored support for the following operating systems.
IBM AIX [4a1b05c] PostgreSQL 19 now supports the following standards.
UNICODE 17.0.0 [57ee397]
GB18030 2022 [5334620]
C23 standards [76f4b92]
2.5.2 Transaction ID Round Warning
The DETAIL log now includes a percentage remaining in the transaction ID round warning message. Additionally, the threshold for triggering the warning has been changed from 40 million to 100 million remaining IDs. [e646450, 48f11bf]
PDF page 11
2.5.3 LSN Notation
The notation for LSN has been standardized, and the lower 32 bits are now always zero-padded when displayed. This change breaks compatibility with the notation used in some views and function return values. [2633dae]
2.5.4 LDAP protocol
The connection to the LDAP server now uses LDAP version 3. Previously, version 2 was used. [5f19d13]
2.5.5 Object Name
The CR and LF characters can no longer be used in the names of databases, roles, and tablespaces. [b380a56]
2.5.6 GUC
PostgreSQL 19 introduces the following incompatibilities related to parameter (GUC) settings.
PDF page 12
Parameter standard_conforming_strings
This parameter can no longer be set to “off”. [4576208]
Resetting Parameters
Specifying a parameter that does not exist in the ALTER DATABASE RESET or ALTER USER RESET statements will result in an error. In previous versions, this did not result in an error. [9a71989]
2.5.7 MD5 Authentication
When the md5_password_warnings parameter is set to “on” (the default value), the warning is now output during authentication using an MD5 password. [bc60ee8]
2.5.8 Catalog pg_statistic_ext_data
The JSON output format for the stxdndistinct and the stxddependencies columns in the pg_statistic_ext_data catalog has been changed. [1f927cc, e76defb]
PDF page 13
2.5.9 ON CONFLICT Clause
In PostgreSQL 19, specifying an operator class in the INSERT ON CONFLICT statement causes an error. The following INSERT statement worked successfully in PostgreSQL 18. [630a937]
PDF page 14
2.5.10 RADIUS Authentication
RADIUS/UDP authentication is no longer supported. [a1643d4]
2.5.11 Command psql
The output of the \d+ metacommand for partition tables and inheritance tables has been changed. [7bff9f1, 1a11405]
PDF page 15
2.5.12 MULE_INTERNAL Encoding
The MULT_INTERNAL character encoding has been removed. With this change, the pg_upgrade command now checks for unsupported encodings. [77645d4]
2.5.13 COPY FROM Statement
The COPY FROM statement that specifies a WHERE clause using a system column can no longer be executed. [21c69dc]
PDF page 16
2.5.14 JSON_ARRAY Function
In PostgreSQL 18 and earlier, the JSON_ARRAY function returned NULL when an empty result set was specified. In PostgreSQL 19, the JSON_ARRAY function returns an empty JSON array, in accordance with the SQL/JSON standard. [8d829f5]
PDF page 17
3 Architecture
PDF page 17
Describes the improved architecture and features in PostgreSQL 19.
3.1.1 Changed System Catalogs
The following catalogs and views have been changed. [228c370, 167ed80, fd5a1a0, deb6744, b71bae4, a5b5432, a850be2, 185e304, d3b6183, 96b3784, f9a09aa, f6a4c49, 3edaf29, 76b7872, e68b6ad, 5db6a34, ab40db3, 0d78952, f3c9e34, c257ba8, a36164e, 307447e, fb80f38, ac58465, 723619e, 8fe315f, 2f094e7, 3b88e50, 4019f72, 01d485b, 87f61f0]
| View Name | Description |
|---|---|
| pg_dsm_registry_allocations | Provides information on Dynamic Shared Memory (DSM) |
| pg_propgraph_element | Property Graph Elements |
| pg_propgraph_element_label | Property Graph Element Labels |
| pg_propgraph_label | Property Graph Labels |
| pg_propgraph_label_property | Property Graph Label Properties |
| pg_propgraph_property | Property Graph Properties |
| pg_publication_sequences | Sequences including in PUBLICATION |
| pg_stat_autovacuum_scores | VACUUM score data for each table |
| pg_stat_lock | Runtime statistics for the locked condition |
| pg_stat_progress_data_checksums | Progress report on checksum configuration Changes |
| pg_stat_progress_repack | REPACK statement progress report |
| pg_stat_recovery | Report on the recovery status of the startup process |
PDF page 18
| View name | Added column | Data type | Description |
|---|---|---|---|
| pg_available_extensions | location | text | Directory for storing extension modules |
| pg_available_extension_versions | location | text | Directory for storing extension modules |
| pg_foreign_data_wrapper | fdwconnection | oid | OID for Foreign Data Wrapper connection function |
| pg_publication | puballsequences | boolean | Is FOR ALL SEQUENCES specified? |
| pg_publication_rel | prexcept | boolean | Indicates whether it is a replication exception table |
| pg_range | rngconstruct2 | regproc | OID for a two-argument constructor |
| rngconstruct3 | regproc | OID for a three-argument constructor | |
| rngmltconstruct0 | regproc | OID for a multi-range constructor with zero arguments | |
| rngmltconstruct1 | regproc | OID for a multi-range constructor with one arguments | |
| rngmltconstruct2 | regproc | OID for a multi-range constructor with two arguments | |
| pg_replication_slots | slotsync skip re__ ason | text | The reason for skipping slot synchronization |
| pg_stats | tableid | oid | OID of the table |
| attnum | smallint | Number of columns | |
| pg_stats_ext | tableid | oid | OID of the table |
| statistics_id | oid | Extended statistics object OID | |
| pg_stats_ext_exprs | tableid | oid | OID of the table |
| statistics_id | oid | Extended statistics object OID | |
| range_length_histogram | anyarray | Histogram with non-empty bin length | |
| range_empty_frac | real | Percentage of empty values | |
| range_bounds_histogram | anyarray | Histogram of the upper and lower limits of a range | |
| pg_stat_database_conflicts | stats_reset | timestamptz | Data reset timestamp |
| pg_stat_progress_analyze | started_by | text | ANALYZE trigger (manual, autovacuum) |
| pg_stat_progress_basebackup | backup_type | text | Specify the type of backup (full or incremental) |
| pg_stat_progress_vacuum | mode | text | VACUUM Execution Modes (normal, aggressive, failsafe) |
| started_by | text | VAUUM trigger (manual, autovacuum, autovacuum_wraparound) | |
| pg_stat_replication_slots | mem exceeded__ count | bigint | Number of times the decoding memory usage exceeded logical_decoding_work_mem |
| slotsync skip co__ unt | bigint | Number of synchronization skips for replication slots | |
| slotsync last ski__ p | timestamptz | Last timestamp of synchronization skip for replication slots | |
| pg_stat_subscription_stats | confl_update_deleted | bigint | Number of times the item to be updated has been deleted in other sources |
| sync_seq_error_count | bigint | Number of sequence synchronization errors | |
| sync_table_error_count | bigint | Number of synchronization errors for the table | |
| pg_stat_user_functions | stats_reset | timestamptz | Statistics reset timestamp |
| pg_stat_wal | wal_fpi_bytes | numeric | Number of bytes for full-page write |
| pg_subscription | subretaindeadtup les | boolean | Is update_deleted detection enabled? |
| submaxretention | int | Maximum retention period for dead doubles | |
| subretentionactiv e | boolean | To keep the dead tuple? | |
| subserver | oid | OID of the FOREIGN SERVER for PUBLICATION connection | |
| subwalrcvtimeou t | text | WAL receiver timeout | |
| pg_stat_{all|sys|user}_{tables|indexes} | stats_reset | timestamptz | Statistics reset timestamp |
| pg_statio_{all|sys|user}_{tables|indexes} | stats_reset | timestamptz | Statistics reset timestamp |
PDF page 19
PDF page 20
| View name | Remove column | Description |
|---|---|---|
| pg_stat_subscription_stats | sync_error_count | Renamed to sync_tale_error_count |
| View name | Description |
|---|---|
| pg_edge_table_components | Property Graph object information |
| pg_element_table_key_columns | Property Graph object key columns |
| pg_element_table_labels | Property Graph object labels |
| pg_element_table_properties | Property Graph object properties |
| pg_element_tables | Property Graph object tables |
| pg_labels | Property Graph object labels |
| pg_property_graph_privileges | Property Graph object privileges |
| property_graphs | Property Graph information |
PDF page 21
| View name | Description |
|---|---|
| pg_aggregate | The aggtransspace column allows negative values. It is used when the transition state cannot be predicted, such as with array_agg function. |
| pg_class | The tuple with “relkind=‘g’”, which indicates a PROPERTY GRAPH object, is added |
| pg_subscription_rel | Information about the sequences to be replicated is added |
| pg_stat_wal_receiver | The “connecting” message may appear in the status column |
View pg_dsm_registry_allocations
The pg_dsm_registry_allocations view provides information about Dynamic Shared Memory (DSM). This view can only be accessed by users with the SUPERUSER privilege or who are members of the pg_read_all_stats role. [167ed80]
| Column name | Data type | Description |
|---|---|---|
| name | text | Entry name |
| type | text | Indicates the entry type. The following values are returned. • segment • area • hash |
| size | bigint | Entry size |
View pg_stat_lock
The pg_stat_lock view provides cumulative information on lock durations. This view is accessible to all users. [4019f72]
PDF page 22
| Column name | Data type | Description |
|---|---|---|
| locktype | text | Type of the lock |
| waits | bigint | Total number of waiting times |
| wait_time | bigint | Total waiting time |
| fastpath_exceeded | bigint | Number of times a lock could not be acquired via the fast path |
| stats_reset | timestamp with time zone | Timestamp of the statistics reset |
View pg_stat_progress_data_checksums
The pg_stat_progress_data_checksums view allows real-time monitoring of the progress of checksum activation. [f19c0ec]
PDF page 23
| Column name | Data type | Description | Note |
|---|---|---|---|
| pid | integer | Process ID of the worker | |
| datid | oid | OID of the database | |
| datname | name | Name of the database | |
| phase | text | Current progressing phase | |
| databases_totaldatabases_done | bigint | The total number of databases | |
| bigint | The number of processed databases | ||
| relations_totalralations_done | bigint | The number of tables | |
| bigint | The number of processed tables | ||
| blocks_totalblocks_done | bigint | The number of total blocks | |
| bigint | The number of processed blocks |
View pg_stat_progress_repack
The pg_stat_progress_repack view allows real-time monitoring of the execution status of the REPACK statements. [ac58465]
PDF page 24
| Column name | Data type | Description |
|---|---|---|
| pid | integer | Process ID of the backend server |
| datid | oid | OID of the database |
| datname | name | Name of the database |
| relid | oid | OID of the targeted for REPACK statement |
| command | text | SQL statements (REPACK, VACUUM FULL, etc.) |
| phase | text | Processing phase |
| repack_index_relid | oid | OID of the processing index |
| heap_tuples_scanned | bigint | Number of tuples scanned |
| heap_tuples_written | bigint | Number of tuples written |
| heap_blks_total | bigint | Number of blocks in the table |
| heap_blks_scanned | bigint | Number of blocks scanned |
| index_rebuild_count | bigint | Number of index rebuilds |
PDF page 25
View pg_stat_recovery
The pg_stat_recovery view provides the recovery status of the standby database. This view can be retrieved by users with the SUPERUSER privilege or who have the pg_monitor role. [01d485b]
| Column name | Data type | Description |
|---|---|---|
| promote_triggered | boolean | Whether a promotion occurred |
| last_replayed_read_lsn | pg_lsn | Last start WAL position replayed |
| last_replayed_end_lsn | pg_lsn | Last end WAL position replayed |
| last_replayed_tli | integer | Last timeline replayed |
| replay_end_lsn | pg_lsn | WAL log location of the record currently being replayed |
| replay_end_tli | integer | Timeline of the WAL record replayed |
| recovery_last_xact_time | timestamp with time zone | Timestamp of the last transaction commit |
| current_chunk_start_time | timestamp with time zone | Time when the startup process observed |
| pause_state | text | Recovery pause state |
3.1.2 Logical Replication Enhancements
The following new features have been implemented for logical replication
PDF page 26
Sequence Replication
Sequence replication is now supported in logical replication. On the publication side, create the publication by specifying the ALL SEQUENCES clause. The names of the sequences contained in the publication are stored in the pg_publication_sequences view. [5509055]
PDF page 27
SERVER clause in the CREATE SUBSCRIPTION statement
Previously, the connection information for connecting to the PUBLICATION was specified directly in the CONNECTION clause of the CREATE SUBSCRIPTION statement. In PostgreSQL 19, it is now possible to specify an existing SERVER object in the SERVER clause. [8185bb5]
PDF page 28
Specifying Exception Tables
The EXCEPT clause can be specified for the PUBLICATION that uses the ALL TABLES clause to designate tables to be excepted. The EXCEPT clause is specified in the CREATE PUBLICATION or ALTER PUBLICATION statement. The prexcept column has been added to the pg_publication_rel catalog to indicate exception tables. [5984ea8, fd36606, 493f8c6]
Subscription option retain_dead_tuples
The retain_dead_tuples option has been added to subscriptions. Enabling this option causes the subscriber to retain deleted tuples until the remote transaction is completed. When setting the retain_dead_tuples option to “true”, the track_commit_timestamp parameter must also be set to “true” (default: “false”). [228c370]
Subscription option max_retention_duration
The max_retention_duration option has been added to subscriptions. This option sets the maximum retention period for non-deletable transaction IDs in environments where the retain_dead_tuples
PDF page 29
option is enabled. Once this threshold is exceeded, the apply worker stops retaining conflict detection information. The setting for this option can be verified in the submaxretention column of the pg_subscription catalog. [a850be2]
Detection of Memory Usage for Decoding
The mem_exceeded_count column has been added to the pg_stat_replication_slots view. This column indicates the number of times the memory used for logical decoding exceeded the logical_decoding_work_mem parameter. [d3b6183]
Conflict Detection
The update_deleted conflict can now be detected when an update on a subscriber conflicts with a local deletion. To use this feature, the retain_dead_tuples option must be enabled on the subscriber. [fd5a1a0]
PDF page 30
Automatic WAL Level Change
Even if the wal_level parameter is set to its default value of “replica”, the WAL output level is automatically changed to “logical” when a logical replication slot is created. The internal parameter effective_wal_level has been added to indicate this state. When all logical replication slots are deleted, the value of the effective_wal_level parameter reverts to its original state. [67c2097]
3.1.3 Partition Table Enhancements
The following new features have been implemented in the partition table.
PDF page 31
Merging Partitions
It is now possible to merge multiple partitions into a single partition using an ALTER TABLE statement on RANGE or LIST partitioned tables. Specify the existing partitions in the MERGE PARTITIONS clause and specify the name of the new partition to be created as the destination in the INTO clause. [f2e4cc4, 713e553]
Syntax 1 - MERGE PARTITIONS clause
The following example merges partitions part1v1 and part1v2 into the part1v12 partition.
PDF page 32
Partition Splitting
It is now possible to split a partition into multiple partitions using the ALTER TABLE statement on RANGE/LIST partition tables. Specify the source partition in the SPLIT PARTITION clause of the ALTER TABLE statement, and specify the destination partitions and partitioning values in the INTO clause. [4b3d173, 713e553]
Syntax 2 - SPLIT PARTITION clause
PDF page 33
3.1.4 SQL Property Graph
PostgreSQL 19 introduces the PROPERTY GRAPH object, which provides graph query features. This feature implements Property Graph Queries (SQL/PGQ) - ISO/IEC 9075-16:2023. PROPERTY GRAPH objects are created using the CREATE PROPERTY GRAPH statement. It creates a table that serves as the source for graph queries and maps it to a PROPERTY GRAPH. VERTEX and NODE, as well as EDGE and RELATIONSHIP, have the same meanings. This document does not provide detailed instructions on how to use it. [2f094e7]
Syntax 3 - Creating a Property Graph
PDF page 34
3.1.5 SSL/SNI
PostgreSQL now supports SSL Server Name Indication (SNI) on the server side. This feature is enabled by setting the ssl_sni parameter to “on” (the default value is “off”). To configure SNI, use the pg_hosts.conf file in the database cluster. In the pg_hosts.conf file, enter the following entries, one per line. [4f43302]
PDF page 35
| Setting | Description | Note |
|---|---|---|
| HOSTNAME | Hostname (required) | |
| SSL CERTIFICATE | SSL certificate file (required) | |
| SSL KEY | SSL private key file (required) | |
| SSL CA | SSL authentication file (optional) | |
| PASSPHRASE COMMAND | Passphrase (optional) | |
| PASSPHRASE COMMAND RELOAD | Reload passphrase (optional) |
3.1.6 Dynamic Checksum Configuration
It is now possible to enable or disable block checksums while the instance is running. To enable checksums, execute the pg_enable_data_checksums function; to disable them, execute the pg_disable_data_checksums function. Enabling checksums is executed by a background worker process. When enabling checksums, the pg_enable_data_checksums function allows specifying the cost_delay parameter (default value 0) and the cost_limit parameter (default value 100), which enables checksums in a behavior similar to VACUUM cost delay. Checksum enablement executes in the background, and progress can be tracked via the pg_stat_progress_data_checksums view. [f19c0ec]
PDF page 36
3.1.7 Roles
The pg_read_all_data and pg_write_all_data functions now support reading and writing large objects. In previous versions, the error “ERROR: permission denied for large object {OID}” occurred. [d981976]
PDF page 37
3.1.8 Libpq
The following APIs have been added or enhanced.
Connection string servicefile
The servicefile option has been added to the connection string to specify a service file. The
PDF page 38
Connection string oauth_ca_file
The oauth_ca_file option has been added to the connection string to specify an OAuth certificate. The PGOAUTHCAFILE environment variable is now available in non-debug modes as well. [9933681]
Retrieving Version Information
The get_pg_version function, which retrieves version information from the PG_VERSION file, has been added. This function is used by commands such as pg_resetwal, pg_combinebackup, pg_createsubscriber, and pg_upgrade. [cd0be13]
Other API
The following APIs have been added. [fe07100, 7508169, e533524, b8d7685]
| API name | Description | Note |
|---|---|---|
| pg_database_localeGetNamedDSAGetNamedDSHash | Retrieve the database’s default locale Assign the DSA Assign the DSA hash | |
| ParallelSlotSetIdlePQgetThreadLock | Mark ParallelSlot as idle Retrieve lock information for the current thread |
3.1.9 I/O Processing
These are the improvements to I/O processing in PostgreSQL 19.
PDF page 39
Automatic Scaling of Asynchronous I/O Workers
The number of I/O workers now automatically increases or decreases in response to load. The number of active I/O workers is determined by the following parameters: As the I/O queue grows, the number of workers increases; if a worker remains idle for a certain period of time, it is stopped. [d1c01b7]
| Parameter name | Description | Default value |
|---|---|---|
| io_min_workers | Minimum number of I/O workers | 2 |
| io_max_workers | Maximum number of I/O workers | 8 |
| io_worker_idle_timeout | Idle time before a worker terminates | 60s |
| io_worker_launch_interval | Interval between worker launches | 100ms |
Enhanced Streaming I/O
PostgreSQL 19 has enhanced the scope of streaming I/O.
VACUUM for BRIN index [a6eac22]
Data deleting reads for hash index [bfa3c4f]
Index reads in the Contrib module pgstattuple [213f007]
Improvements to asynchronous I/O processing
When using io_uring with I/O methods, the behavior has been changed so that synchronous I/O is used for reads of four blocks or fewer. [a9ee668, 8ca147d, f63ca33]
3.1.10 Automatic Vacuum
The following features have been added to the automatic VACUUM processing.
Using Parallel Workers
It is now possible to use parallel workers during automatic VACUUM operations. Automatic VACUUM performs the same processing as the VACUUM (PARALLEL) statement. The number of parallel workers is determined by the autovacuum_max_parallel_workers parameter. The default value for this parameter is 0. Refer to the automatic VACUUM log to verify that parallel workers are launched.
PDF page 40
Prioritization by scoring
PostgreSQL 19 introduced the scoring system that determines the execution order of automatic VACUUM operations. It prioritizes tables that deviate the most from the thresholds used to trigger VACUUM and ANALYZE operations. Scores are determined by the newly added pg_stat_autovacuum_scores view. For example, if 100 tuples are updated by an UPDATE statement and the VACUUM threshold is 80, the score will be 1.25. The actual score is determined by multiplying this value by the following parameters, which represent their respective weights. [87f61f0]
| Parameter name | Default value | Description |
|---|---|---|
| autovacuum_analyze_score_weight | 1.0 | ANALYZE score weight |
| autovacuum_freeze_score_weight | 1.0 | FREEZE score weight |
| autovacuum_multixact_freeze_score_weight | 1.0 | Multi-Transaction FREEZE score weight |
| autovacuum_vacuum_insert_score_weight | 1.0 | VACUUM INSRT score weight |
| autovacuum_vacuum_score_weight | 1.0 | VACUUM score weight |
The structure of the pg_stat_autovacuum_scores view is as follows.
PDF page 41
| Column name | Data type | Description |
|---|---|---|
| relid | oid | OID of the table |
| schemaname | name | Name of the schema |
| relname | name | Name of the table |
| score | double precision | Maximum value of all component scores |
| xid_score | double precision | Transaction ID age score |
| vacuum_score | double precision | Vacuum score |
| vacuum_insert_score | double precision | Vacuum insert score |
| analyze_score | double precision | Analyze score |
| do_vacuum | boolean | Whether autovacuum would vacuum the table |
| do_analyze | boolean | Whether autovacuum would analyze the table |
| for_wraparound | boolean | Whether autovacuum would vacuum the table for wraparound prevention |
3.1.11 Hook
The following hooks have been added for the planner.
PDF page 42
Hook planner_setup_hook, planner_shutdown_hook
The planner_setup_hook hook, which is executed when the PlannerGlobal object is initialized, and the planner_shutdown_hook hook, which is executed immediately before the object is destroyed, have been added. [94f3ad3, 0f4c8d3]
Hook joinrel_setup_hook, join_path_setup_hook
The joinrel_setup_hook hook, which is executed when creating table join relations (joinrel), and the join_path_setup_hook hook, which is executed when adding paths to a joinrel, have been added. [4020b37]
3.1.12 Faster processing
Performance improvements have been implemented through changes to processor instructions and sorting algorithms.
Sorting
Some sorting algorithms have been changed from Quick sort to Radix sort. If there are fewer than 40 items, Quick sort will be used. [ef3c3cf]
Internal functions hex_encode / hex_decode
The hex_encode and hex_decode functions now support SIMD instructions for the x86-64 and Aarch64 architectures. The larger the input value, the more effective the performance improvement is expected to be. [ec8719c]
Page Checksum
If available, AVX2 instructions are used to calculate the page checksum. [5e13b0f]
CRC32C
If the Crypto Extension is available on an Arm v8 processor, it is used for CRC32C calculations. [fbc57f2]
COPY FROM statement
Performance has been improved by using SIMD instructions to check for the presence of special characters. [e0a3a3f]
PDF page 43
3.1.13 Log Output
The byte count for full-page images is now included in the logs generated by the automatic ANALYZE operation. [ad25744]
3.1.14 OAuth Authentication
The following new features have been added to the OAuth authentication feature.
File pg_hba.conf Settings
It is now possible to specify OAuth validator information in the pg_hba.conf options. The following is an example of pg_hba.conf from the manual. [b977bd3]
Validator Error Output
The following parameters have been added to control how errors generated by the validator are logged. [d438a36]
PDF page 44
| Parameter name | Description | Default value |
|---|---|---|
| oauth_validator.error_detail | Error information contained in DETAIL | '' |
| oauth_validator.internal_error | Whether to output internal errors | false |
3.1.15 Wait Events
The following wait events have been added. [6c5c393, e05a24c, 7a39f43]
| Wait event name | Description | Note |
|---|---|---|
| WaitEventBufferCOPY_FROM_READCOPY_TO_WRITE | Waiting for the data buffer Waiting for the COPY FROM read Waiting for the COPY TO write | Changed from WaitEventBufferPin |
| WAIT_FOR_WAL_WRITE | Waiting to write to the standby |
4 SQL Statements
PDF page 45
This section explains new features related to SQL statements.
3.2.1 ALTER DOMAIN statement
The lock level required to execute the ALTER DOMAIN VALIDATE CONSTRAINT statement has been changed from SHARE to SHARE UPDATE EXCLUSIVE. [16a0039]
3.2.2 ALTER FOREIGN DATA WRAPPER statement
The CONNECTION clause, which specifies the function used to establish a new connection, has been added. [8185bb5]
Syntax 4 - ALTER FOREIGN DATA WAPPER CONNECTION statement
3.2.3 ALTER PUBLICATION statement
It is now possible to specify the SET ALL TABLES clause and the SET ALL SEQUENCES clause in an ALTER PUBLICATION statement. This is only possible for publications that specify the ALL TABLES/SEQUENCES clause or for empty publications. [5984ea8, fd36606, 493f8c6, 5509055]
Syntax 5 - ALTER PUBLICATION statement
PDF page 46
3.2.4 ALTER SUBSCRIPTION statement
The ALTER SUBSCRIPTION REFRESH SEQUENCES statement, which updates the sequence information included in the subscription, has been added. [f0b3573]
Syntax 6 - ALTER SUBSCRIPTION REFRESH SEQUENCES statement
3.2.5 ALTER TABLE statement
The following enhancements have been added to the ALTER TABLE statement.
Changing the Expression for Virtual Generated Columns
It is now possible to change the expression for virtual generated columns with a CHECK constraint using the SET EXPRESSION clause. [f80bedd]
Syntax 7 - SET EXPRESSION clause
PDF page 47
Setting the CHECK constraint to ENFORCED
It is now possible to change the setting of the ENFORCED clause for CHECK constraints. [342051d]
Syntax 8 - ENFORCED clause
PDF page 48
Option autovacuum_parallel_workers
The autovacuum_parallel_workers option has been added for tables. This option can also be specified in the CREATE TABLE statement. It specifies the number of parallel VACUUM worker processes. The default value for this option is -1, and it inherits the value from the autovacuum_max_parallel_workers parameter. If this option is set to 0, parallel VACUUM is disabled. [1ff3180]
Optimizing ALTER TABLE Statements
When using the ALTER TABLE ADD COLUMN statement, the addition of a column with a CHECK constraint or a NOT NULL constraint on a domain can now be checked for the need to rewrite the table. If no rewrite is necessary, the table will not be rewritten. [a0b6ef2]
3.2.6 CHECKPOINT statement
The following options have been added to the CHECKPOINT statement.
MODE option
The MODE option determines how checkpoints are executed. The MODE FAST option is the default behavior and executes checkpoints as quickly as possible. If the MODE SPREAD option is specified, checkpoints are executed with reduced load based on relevant parameters. [2f698d7]
Syntax 9 - CHECKPOINT statement
PDF page 49
| Option | Log message | Note |
|---|---|---|
| FAST | LOG: checkpoint starting: fast force wait | |
| SPREAD | LOG: checkpoint starting: force wait |
FLUSH_UNLOGGED option
Enabling the FLUSH_UNLOGGED option causes the database to also flush dirty buffers that have not been logged at the checkpoint. [8d33fba, a4f1265]
Syntax 10 - FLUSH_UNLOGGED option
| Option | Log message |
|---|---|
| No specification | LOG: checkpoint starting: fast force wait |
| FLUSH_UNLOGGED | LOG: checkpoint starting: fast force wait flush-unlogged |
3.2.7 COPY statement
The following new features have been implemented to the COPY statement.
ON_ERROR option setting
It is now possible to specify the “set_null” for the on_error option in the COPY FROM statement. This option sets the column value to NULL if a data type conversion error occurs. [2a525cc]
PDF page 50
Partition Table Support
The COPY TO statement can now be executed on partition tables. In previous versions, it was necessary to execute the COPY (SELECT …) TO statement instead of using the partition table name. [4bea91f]
PDF page 51
Number of header rows
It is now possible to specify the number of header rows in the data. [bc2f348]
JSON format output
It is now possible to specify “json” as the FORMAT option for the COPY TO statement. The additional option “force_array” can also be specified. [7dadd38, 4c0390a]
PDF page 52
3.2.8 CREATE PUBLICATION statement
It is now possible to specify the FOR ALL SEQUENCES clause, which applies to all sequences. This clause requires a user with the SUPERUSER privilege to execute the CREATE PUBLICATION statement. To indicate whether this clause has been specified, the puballsequences column has been added to the pg_publication catalog. [96b3784]
Syntax 11 - FOR ALL SEQUENCES clause
PDF page 53
3.2.9 CREATE SCHEMA statement
It is now possible to specify objects other than tables, views, indexes, sequences, triggers, and GRANT in the CREATE SCHEMA statement. [a9c350d, 404db8f]
PDF page 54
| Object | PostgreSQL 18 | PostgreSQL 19 | Note |
|---|---|---|---|
| AGGREGATE | No | Yes | |
| COLLATION | No | Yes | |
| DOMAIN | No | Yes | |
| FUNCTION | No | Yes | |
| INDEX | Yes | Yes | |
| OPERATOR | No | Yes | |
| PROCEDURE | No | Yes | |
| SEQUENCE | Yes | Yes | |
| TABLE | Yes | Yes | |
| TEXT SEARCH CONFIGURATION | No | Yes | |
| TEXT SEARCH DICTIONARY | No | Yes | |
| TEXT SEARCH PARSER | No | Yes | |
| TEXT SEARCH TEMPLATE TRIGGER | No | Yes | |
| Yes | Yes | ||
| TYPE | No | Yes | |
| VIEW | Yes | Yes | |
| GRANT | Yes | Yes |
3.2.10 CREATE STATISTICS statement
It is now possible to create extended statistics by specifying a virtual column. [f7f4052]
PDF page 55
3.2.11 DELETE / UPDATE statement
The FOR PORTION OF clause can now be specified in UPDATE and DELETE statements. When a range is specified in the FOR PORTION OF clause, a new tuple matching that range is created, and the updates specified in the SET clause are applied to it. The original tuple is split into tuples that fall outside the range specified in the FOR PORTION OF clause. [8e72d91]
Syntax 12 - FOR PORTION OF clause
Since the behavior can be confusing, a sample will be used to explain it. Initially, the range1 table contains two tuples: one in the col1 column (of type DATERANGE) representing the range “April 1, 2026 - May 1, 2026” and another representing the range “May 1, 2026 - June 1, 2026”.
PDF page 56
3.2.12 EXPLAIN statement
The following features have been added to the EXPLAIN statement.
Output of I/O Statistics
The IO option has been added to the EXPLAIN statement to output I/O statistics. The IO option must be specified together with the ANALYZE option. [681daed, 3b1117d, e157fe6]
PDF page 57
Output of Memoize Estimation Information
Estimation information (Estimates:) is now output when Memoize node is included in the execution plan. [4bc62b8]
Output of WAL FPI Byte Count
The WAL data now includes FPI bytes. [5ab0b6a]
PDF page 58
Subquery Name
The subquery blocks in the executed execution plan now display unique names. Previously, only numbers were displayed. [8c49a48]
PDF page 59
PDF page 60
3.2.13 GRANT statement
It is now possible to specify a grantee other than the current user in the GRANTED BY clause of GRANT and REVOKE statements. In previous versions, this resulted in the error “ERROR: grantor must be current user.”. [dd1398f]
3.2.14 INSERT statement
It is now possible to specify the DO SELECT clause in an INSERT ON CONFLICT statement. [8832709]
Syntax 13 - ON CONFLICT DO SELECT
PDF page 61
3.2.15 REPACK statement
The REPACK statement has been added to PostgreSQL 19. The REPACK statement is the SQL statement that executes both the VACUUM FULL and CLUSTER statements in the single command. When the REPACK statement is executed on its own, it targets all tables and materialized views for which the current user has MAINTAIN privileges. It is also possible to specify specific tables, but UNLOGGED tables and partitioned tables cannot be specified. The USING INDEX clause sorts the data based on the information in the specified index. The progress of the REPACK statement can be monitored via the pg_stat_progress_repack view. [ac58465, 28d534e, e76d8c7, 5dbb63f]
Syntax 14 - REPACK statement
The following options can be specified in a REPACK statement.
| Option | Description |
|---|---|
| ANALYZE | Execute an ANALYZE statement after the REPACK operation is complete |
| CONCURRENTLY | Minimize locks and allow access to other SQL statements |
| VERBOSE | Output a detailed execution log |
PDF page 62
3.2.16 SELECT statement
The following features have been added to SELECT statements.
GROUP BY ALL clause
The ALL clause can now be specified in the GROUP BY clause. This executes the GROUP BY operation using all output columns. [ef38a4d]
PDF page 63
GROUPING SETS and Subqueries
Subqueries now support references to GROUPING SETS columns. The following syntax would have resulted in an error in previous versions. [415100a]
PDF page 64
3.2.17 SET statement
It is now possible to specify a NULL value in SET statements and ALTER SYSTEM SET statements. [ff4597a]
3.2.18 VACUUM statement
The following information has been added to the output of the VACUUM VERBOSE statement.
Memory Information
Memory information beginning with “memory usage:” is output. [736f754e]
PDF page 65
Parallel Worker Information
Information about the parallel workers used by the VACUUM statement is output. [adcdbe9]
3.2.19 WAIT FOR LSN statement
The WAIT FOR LSN statement, a new SQL syntax, has been added to PostgreSQL 19. This SQL statement is mainly executed on standby instances in a streaming replication environment. When the WAIT FOR LSN statement is executed, it waits until the specified LSN is applied. [447aae1, 3b4e53a, 49a181b]
PDF page 66
Syntax 15 - WAIT FOR LSN statement
The following options are available.
MODE ‘mode’
Specify the mode for how long to wait. The following values can be specified. “primary_flush” is specified on the primary server; all others are specified on the standby server.
| Setting value | Description | Note |
|---|---|---|
| primary_flushstandby_replaystandby_writestandby_flush | Primary server flush Apply WAL to the standby server Write WAL to the standby server Flush WAL on the standby server | On the primary server |
TIMEOUT ’timeout'
Specify the maximum wait time. If no value is specified or if zero (0) is specified, this statement will wait indefinitely.
NO_THROW
Even if a timeout occurs, no error is thrown.
PDF page 67
| Return value | Description | Note |
|---|---|---|
| success | The specified LSN has been reached | |
| timeout | The wait time has exceeded the timeout | |
| not in recovery | The executed instance is not in recovery state |
3.2.20 Functions
The following functions have been added or enhanced.
Window Functions
It is now possible to specify the IGNORE NULLS clause (ignore NULL values) and the RESPECT NULLS clause (include NULL values) for the window functions LEAD, LAG, FIRST_VALUE, LAST_VALUE, and NTH_VALUE. The default is RESPECT NULLS. [25a30bb]
PDF page 68
Function encode and decode
It is now possible to specify base64url and base32hex as encoding formats. [e1d9171, 497c117]
Function error_on_null
The error_on_null function has been added; it returns an error if the input value is NULL, and returns the input value if it is not NULL. [2b75c38]
PDF page 69
Syntax 16 - Function error_on_null
Function random
Variations of the random function that specify maximum and minimum values now support the date, timestamp, and timestamp with time zone types. [faf071b]
Syntax 17 - Function random variations
Function range_minus_multi and multirange_minus_multi
The range_minus_multi and multirange_minus_multi functions have been added to remove ranges from a range and return multiple ranges, respectively. [5eed8ce]
Syntax 18 - Function range_minus_multi and multirange_minus_multi
PDF page 70
Function tid_block and tid_offset
The tid_block and tid_offset functions have been added to retrieve the block number and row offset from the CTID. [df6949c]
Syntax 19 - Function tid_block and tid_offset
PDF page 71
Function width_bucket
It is now possible to specify NaN as the first parameter, operand, of the width_bucket function. The following SQL statement would have caused an error in previous versions. [7374b3a]
DDL Export
Functions have been added to output DDL for databases, tablespaces, and roles. [4881981, 76e514e, b99fd9f, a4f774c]
Syntax 20 - Export DDL functions
The following settings can be specified in the options.
| Option | Data type | Description | Note |
|---|---|---|---|
| pretty | boolean | Formatted output | |
| owner | boolean | Include owner | Cannot be specified with pg_get_role_ddl |
| tablespacememberships | boolean | Include tablespace | pg_get_database_ddl only |
| boolean | Include member | pg_get_role_ddl only |
PDF page 72
Function pg_clear_extended_stats
The pg_clear_extended_stats function, which clears a table’s extended statistics, has been added. [d756fa1]
Syntax 21 - Function pg_clear_extended_stats
Function pg_get_multixact_stats
The pg_get_multixact_stats function, which retrieves the status of multi-transactions, has been added. This function returns the following values. [97b1017]
PDF page 73
| Column name | Data type | Description |
|---|---|---|
| num_mxids | bigint | Multi-transaction IDs in use |
| num_members | bigint | Size of multi-transaction ID members in use |
| members_size | bigint | Storage size used by members |
| oldest_multixact | xid | Oldest multi-transaction ID |
Function pg_get_sequence_data
The page_lsn column, which indicates the LSN, has been added to the output results. [b93172c]
Function pg_get_publication_tables
The pg_get_publication_tables function now includes a variant that allows table information to be specified. [fd7a25a]
Syntax 22 - Function pg_get_publication_tables with table id
PDF page 74
Function pg_replication_origin_session_setup
The pid parameter has been added to specify the worker process ID using origin. The default value is 0, which indicates the first process ID. [5b14870] [5b14870]
Function pg_restore_extended_stats
The pg_restore_extended_stats function, which restores a table’s extended statistics, has been added. [0e80f3f, 302879b, ba97bf9]
Syntax 23 - Function pg_restore_extended_stats
PDF page 75
Function pg_stat_get_backend_wal
The pg_stat_get_backend_wal function now includes wal_fpi_bytes (of type numeric), which indicates the number of FPI bytes, in its return value. [f9a09aa]
Function pg_sync_replication_slots
The pg_sync_replication_slots function now includes a feature that retries until synchronization is complete. [0d2d4a0]
3.2.21 JSON
The following enhancements regarding JSON data have been implemented.
Added jsonpath methods
The following jsonpath methods have been added. [bd4f879]
PDF page 76
| Method name | Description | Note |
|---|---|---|
| ltrim / rtrim / btrim lower upper initcap replace split_part | Remove leading and trailing characters Convert to lowercase Convert to uppercase Capitalize the first letter and convert the rest to lowercase Convert the specified string Return elements split by the specified string |
PDF page 77
IS JSON predicate
It is now possible to specify the IS JSON predicate for the domain. In previous versions, the IS JSON predicate was only available for the text, json, jsonb, and bytea data types. [3b4c2b9]
3.2.22 Data Types
The following extensions have been implemented for data types in PostgreSQL 19.
Data type regdatabase
The regdatabase data type, which represents a database OID, has been added. To retrieve the OID of the current database, it can be written as follows. [bd09f02]
Data type oid8
The oid8 data type, which represents 8-byte OIDs, has been added. [b139bd3]
PDF page 78
Converting between the UUID and BYTEA types
The uuid and bytea types can now be converted between each other. [ba21f5b]
GiST Indexes of Type inet and cidr
The operator classes for GiST indexes of type inet and cidr have been changed to inet_ops and cidr_ops, respectively. As a result of this change, the btree_gist extension is no longer required. The following CREATE INDEX statements will result in an error in PostgreSQL 18 and earlier. The pg_upgrade command will fail if the older database contains the gist_inet_ops or gist_cidr_ops operator classes. [b352d3d]
PDF page 79
Tsearch-related data types
The analysis now uses the database’s default collation. Previous versions used the database’s CTYPE setting. [e113f9c]
3.2.23 PL/pgSQL
The following features have been added to the PL/pgSQL module.
Optimizing Simple SELECT INTO Statements
The execution of the SELECT INTO statement that uses a simple scalar expression to assign to a single variable is no longer treated as an SQL statement execution; instead, it is now converted into an assignment operation. Due to this update, the target SQL statement will no longer trigger hooks in the pg_stat_statements module. [ce8d5fe]
Reserved Word Removal
EXECUTE and STRICT have been removed from the reserved word list. These words can now be used as variable names and for other purposes. [999f172]
PDF page 80
3.2.24 PL/Python
Events trigger support has been added. [53eff47]
3.2.25 Optimizer
The faster execution plan is now selected.
Eager Aggregation
Eager aggregation optimization has been implemented to reduce the number of input tuples in join operations by performing partial aggregation before the join. This optimization is controlled by the enable_eager_aggregate parameter. The default value is “on”, meaning it is enabled. The group size required to consider eager aggregation is specified by the min_eager_agg_group_size parameter. The default value for this parameter is 8. [8e11859]
PDF page 81
Using Memoize with ANTI JOIN
The memoization feature is now available for SEMI JOIN and ANTI JOIN. [0da29e4]
PDF page 82
PDF page 83
Rewriting the COUNT function
If possible, the COUNT(any) clause is rewritten as a COUNT(*) clause. This rewrite is limited to cases where a non-NULL column is specified and there is no ORDER BY or DISTINCT clause. This change reduces overhead and improves performance. [42473b3]
PDF page 84
Parallelization of TID Range Scans
It is now possible to execute TID Range Scans using parallel queries. [0ca3b16]
PDF page 85
Partial Hash Index
HASH indexes created as partial indexes can now be used in execution plans when a WHERE clause is specified that matches their conditions. This feature has been backported to PostgreSQL 14 and later. [5528e8d]
PDF page 86
Optimization of the IS DISTINCT FROM clause
The IS DISTINCT FROM clause for columns with a NOT NULL constraint is now converted to the “<>” operator. [0a37961]
Anti-Join Transformation of the NOT IN Clause
If it is determined to be safe, the NOT IN clause uses an Anti-Join in the execution plan. [383eb21]
PDF page 87
Details of the Result Node
Information about the source of the result has been added to the Result node. As a result, information from the “Replace:” node will now be included in the execution results of the EXPLAIN statement. [f2bae51]
PDF page 88
5 Configuration Parameters
PDF page 89
In PostgreSQL 19, the following parameters have been changed.
3.3.1 Added Parameters
The following parameters have been added. The file_extend_method parameter will be backported to PostgreSQL 16 and later. [06473f5, 8e11859, dd3ae37, 67c2097, f94e914, 1d92e0c, 4f43302, d7965d6, a8f45de, 1ff3180, e76d8c7, d1c01b7]
| Parameter name | Description (Context) | Default value |
|---|---|---|
| autovacuum_analyze_score_weight | Specifies the scaling factor of the analyze threshold (sighup) | 1.0 |
| autovacuum_freeze_score_weight | Specifies the scaling factor of the transaction ID age (sighup) | 1.0 |
| autovacuum_max_parallel_workers | Sets the maximum number of autovacuum parallel workers (sighup) | 0 |
| autovacuum_multixact_freeze_score_weight | Specifies the scaling factor of the multixact ID age (sighup) | 1.0 |
| autovacuum_vacuum_insert_score_weight | Specifies the scaling factor of the vacuum insert threshold (sighup) | 1.0 |
| autovacuum_vacuum_score_weight | Specifies the scaling factor of the vacuum threshold (sighup) | 1.0 |
| autovacuum_worker_slots | Specifies the number of backend slots to reserve for autovacuum worker (postmaster) | 16 |
| debug_exec_backend | Reports whether PostgreSQL has been built with EXEC_BACKEND enabled (internal) | off |
| debug_print_raw_parse | Output the parse tree without converting it (user) | off |
| effective_wal_level | Effective WAL output level (internal) | replica |
| enable_eager_aggregate | Enable eager aggregation execution plan (user) | on |
| file_extend_method | File extension methods (sighup) | posix_fallocate |
| hosts_file | SSL/SNI filename (postmaster) | {PGDATA}/pg_hosts.conf |
| io_max_workers | Maximum number of I/O workers (sighup) | 8 |
| io_min_workers | Minimum number of I/O workers (sighup) | 2 |
| io_worker_idle_timeout | Maximum idle time for I/O workers (sighup) | 60000 |
| io_worker_launch_interval | Minimum interval between starting new I/O workers (sighup) | 100ms |
| log_autoanalyze_min_duration | Log output time for automatic ANALYZE execution (sighup) | 10min |
| max_repack_replication_slots | Number of replication slots reserved for executing REPACK (postmaster) | 5 |
| min_eager_agg_group_size | Minimum memory allocation when using eager aggregation (user) | 8 |
| password_expiration_warning_threshold | Period for outputting password expiration warnings (sighup) | 7d |
| ssl_sni | Whether to use SNI for SSL connections (sighup) | off |
| timing_clock_source | Specify the clock source used for timing measurements (superuser) | auto (tsc) |
| wal_sender_shutdown_timeout | Timeout for stopping the WAL sender process (user) | -1 |
PDF page 90
Password Expiration Warning
If the password’s expiration date is within the range specified by the password_expiration_warning_threshold parameter (default value: 7 days), a warning will be output during authentication. [1d92e0c]
PDF page 91
3.3.2 Changed Parameters
The following parameters have been changed in terms of setting range and choices. [38e0190, 1efdd7c, 8a6af3a, 12da457, bf5da5d]
| Parameter name | Change |
|---|---|
| data_checksums | f the checksum is currently being enabled, the status changes to “inprogress-on”. Data type changed from boolean to enum |
| extension_control_path | If an extension with the same name exists in the specified path, the first path found is output to the pg_available_extensions view |
| io_workers | Split into io_max_workers and io_min_workers |
| log_min_messages | The log output level can now be changed for each process type. |
| sync_replication_slots | To enable this parameter, the wal_level parameter must be set to logical |
| wal_receiver_timeout | The context for configuration changes has been changed from signup to user |
Specifying the log_min_messages parameter
The log_min_messages parameter now supports changing the log output level on a per-process basis. Specify process names and levels separated by colons (:), and separate multiple processes with commas (,). [38e0190]
PDF page 92
| Process name setting | Description |
|---|---|
| archiver | WAL archiver process |
| autovacuum | Autovacuum Launcher, Autovacuum Worker process |
| backend | Backend process |
| bgworker | Background worker process |
| bgwriter | Background writer process |
| checkpointer | Checkpointer process |
| ioworker | I/O Worker process |
| postmaster | Postmaster process |
| slotsyncworker | Replication Slot Synchronous Worker process |
| startup | Startup process |
| syslogger | Logger process |
| walreceiver | WAL Receiver process |
| walsender | WAL Senfer process |
| walsummarizer | WAL Summarizer process |
| walwriter | WAL Writer process |
3.3.3 Changed Default Values
The following parameters have changed default values. [2aac62b, 7f8c88c, 79534f9]
| Parameter name | PostgreSQL 18 | PostgreSQL 19 | Note |
|---|---|---|---|
| jit | on | Off | |
| log_lock_waits | off | On | |
| max_locks_per_transactionserver_version | 64 | 128 | |
| 18.4 | 19beta1 | ||
| server_version_num | 180004 | 190000 |
PDF page 93
In binaries built using the “configure” command with the –with-lz4 option, the default value for the default_toast_compression parameter is lz4.
3.3.4 Removed Parameters
The following parameters have been removed. [4576208]
| Parameter name | Reason |
|---|---|
| escape_string_warning | Due to the standard_conforming_strings parameter being fixed, this is no longer necessary. |
6 Utilities
PDF page 94
This section describes the major feature enhancements to the utility commands.
3.4.1 Oid2name
When the –extended option is specified, the “Path” field, which indicates the file path, is now output. [3c5ec35]
3.4.2 Pg_archivecleanup
The log now includes an entry indicating that dry-run mode has been specified. This feature has also been added to the pg_createsubscriber and pg_combinebackup commands. [c05dee1]
3.4.3 Pg_createsubscriber
The following features have been added to the pg_createsubscriber command.
PDF page 95
Log Output Directory
The –logdir option (short form: -l) has been added to the pg_createsubscriber command to specify the log output directory. [6b5b7ea]
Reuse of Replication Slots
If a specified replication slot already exists, it will now be reused. [85ddcc2]
Recovery Parameter Configuration File
The recovery parameters that are temporarily set when the pg_createsubscriber command is executed are now configured in pg_createsubscriber.conf. In previous versions, these were appended to the postgresql.auto.conf file. To enable the pg_createsubscriber.conf file, “include_if_exists ‘pg_createsubscriber.conf’” is automatically added to the postgresql.auto.conf file. After the recovery process is complete, the filename of the pg_createsubscriber.conf file is changed to pg_createsubscriber.conf.disabled. [639352d]
PDF page 96
3.4.4 Pg_dump
The following features have been added to the pg_dump command.
Dump of extended statistics
Extended statistics are now exported using the pg_restore_extended_stats function. [c32fb29]
PDF page 97
3.4.5 Pg_dumpall
The pg_dumpall command now supports output formats other than text. The output format is specified using the –format option (short form: -F). The default value remains text (–format=p). The following values can be specified for the –format option. For output formats other than text, a directory name must be specified for the output destination (–file option). When restoring data dumped by the pg_dumpall command, use the pg_restore command unless text format was specified. [763aaa0]
| Format value | Description | Note |
|---|---|---|
| ptcd | Text format Custom dump format (file extension: .dmp) tar format (file extension: .tar) gzip format by table (file extension: .gz) | Default value |
3.4.6 Pg_restore
The following options have been added to the pg_restore command.
PDF page 98
Option –no-globals
The –no-globals option has been added to prevent the restoration of global objects (roles and tablespaces). This requires the pg_dumpall command output file (in a format other than text) as backup data. [3c19983]
Option –globals-only
The –globals-only option has been added to the pg_dumpall command to restore only global data. [763aaa0]
3.4.7 Pg_upgrade
The following features have been added to the pg_upgrade command.
Migration of In-Place Tablespaces
In-place tablespaces can now be migrated to the new version of the database cluster. In previous versions, in-place tablespaces were not copied. To use this feature, set the allow_in_place_tablespaces parameter to “on” in the destination database before migration. The presence of in-place tablespaces is not verified by the pg_upgrade –check command. [3bcfcd8]
Speed Up Large Object Migration
The pg_upgrade command performs a bulk migration of data by executing the COPY FROM stdin statement when migrating the pg_largeobject_metadata and pg_shdepend catalogs. In previous
PDF page 99
versions, it executed the lo_create function, ALTER LARGE OBJECT statements, and GRANT statements for each large object. [b33f753]
3.4.8 Pg_verifybackup
The pg_verifybackup command can now be executed on backups created in the tar format. In previous versions, the –no-parse-wal option was required to skip parsing WAL files. [b3cf461, f8a0cd2, b15c151]
3.4.9 Pg_waldump
It is now possible to run the pg_waldump command on backups created in the tar format. [b15c151]
3.4.10 Psql
The following new features have been implemented in the psql command.
SERVICEFILE variable
The variable SERVICEFILE, which indicates the service file used for the connection, has been added. [6b1c4d3]
PDF page 100
The %S substitution variable
It is now possible to specify the %S substitution variable in PROMPT1, PROMPT2, and PROMPT3, which define the input prompt for the psql command. This variable is substituted with the value of the search_path parameter. [b3ce55f]
The %i substitution variable
It is now possible to specify the substitution variable %i in PROMPT1, PROMPT2, and PROMPT3, which define the input prompts for the psql command. This variable is substituted based on the in_hot_standby parameter. [dddbbc2]
| In_hot_standby setting | %i placeholder | Note |
|---|---|---|
| on | primary | |
| off | standby | |
| - | ? | Versions without in_hot_standby |
PDF page 101
Outputting BOOLEAN Values
It is now possible to specify the output text for BOOLEAN values using the \pset command. Change the variables display_true and display_false. The default values for these variables are “f” (for false) and “t” (for true). [645cb44]
Comment Output
Comments added to publications, extended statistics, and subscriptions are now included in the output of the \dRp+, \dRs+, and \dX+ metacommands. [aecc558]
PDF page 102
Publication Information
The table definition output now includes information indicating whether a table is included in a publication or not. [2e1d4fd]
PDF page 103
3.4.11 Vacuumdb
The following options have been added to the vacuumdb command.
Option –dry-run
The –dry-run option has been added to display SQL statements without executing them. [d107176]
PDF page 104
Change in the behavior of the –analyze-only option
When the –analyze-only option is specified with the vacuumdb command, statistics are now collected for partition tables as well. In previous versions, partition tables were excluded from statistics collection. [6429e5b]
7 Contrib Modules
PDF page 105
This section describes new features related to the Contrib module.
3.5.1 Auto_explain
The following parameters have been added to the auto_explain module.
Parameter log_extension_options
The auto_explain.log_extension_options parameter has been added. This parameter specifies the string to be passed to the EXPLAIN statement in additional modules such as pg_overexplain.
Parameter log_io
The parameter auto_explain.log_io has been added. The default value is “off”. If this parameter is set to “on”, I/O statistics for executed SQL statements will be logged. This feature is effective only when the parameter auto_explain.log_analyze is set to “on”. [61c36a3]
Parameter log_extension_options
This includes additional options from external modules such as the pg_overexplain module and the pg_plan_adice module in the log.
PDF page 106
3.5.2 Basic_archive
The system no longer checks for the existence of the directory specified by the basic_archive.archive_directory parameter at startup. This change will be backported to PostgreSQL 15 and later. [cc774c5]
3.5.3 File_fdw
The “header” option, which specifies the number of header records in the data file, has been added. [26cb14a]
PDF page 107
3.5.4 Injection_points
The following new features have been added to the injection_points module.
Function injection_points_attach
The injection_points_attach function has been updated to include additional arguments. [16a2f70]
Function injection_points_list
The injection_points_list function, which returns a list of injection points, has been added. [4eca711]
Removed Functions
The following functions related to statistics information have been removed. [d52c24b]
PDF page 108
injection_points_stats_numcalls
injection_points_stats_drop
injection_points_stats_fixed
3.5.5 Pg_buffercache
The following new features have been implemented in the pg_buffercache module.
Add Views
The following views have been added. [4b203d4]
| View name | Description |
|---|---|
| pg_buffercache_os_pages | Mapping between the buffer pool and OS pages |
| pg_buffercache_numa | Mapping of the buffer pool and NUMA nodes |
Add Functions
The following functions have been added. [9ccc049, 4b203d4]
| Function name | Description |
|---|---|
| pg_buffercache_os_pages | Provides a mapping between the buffer pool and OS pages |
| pg_buffercache_mark_dirty | Sets the specified buffer to the dirty state |
| pg_buffercache_mark_dirty_relation | Sets the buffers for the specified relation in the buffer pool to the dirty state |
pg_buffercache_mark_dirty_all Sets all buffers in the buffer pool to the dirty state
PDF page 109
3.5.6 Pg_plan_advice
The new Contrib module pg_plan_advice has been added to PostgreSQL 19. This module provides features for changing execution plans and verifying the modified execution plans. [5883ff3, 6455e55, 26255a3]
Basic Usage
To use this module, follow the steps below. 1. Specify pg_plan_advice in the LOAD statement or in the shared_preload_libraries parameter. 2. Verify the execution plan using an EXPLAIN statement with the PLAN_ADICE option. 3. Information for changing the execution plan is output in the “Generated Plan Advice:” section. 4. Specify information regarding changes to the execution plan in the pg_plan_advice.advice parameter. 5. The execution plan will be changed. In the following example, the join order of tables data1 and data2 is changed to verify that the execution plan changes.
PDF page 110
PDF page 111
| Setting value | Description |
|---|---|
| SEQ_SCAN(target) | Use the sequential scan (Seq Scan) |
| INDEX_SCAN(target) | Use the specified index |
| JOIN_ORDER(item item…) | Specify the join order |
| HASH_JOIN(target) | Execute the hash join |
| NESTED_LOOP_PLAN(target) | Execute the nested loop join |
| GATHER(item) | Specify the parallel query |
| NO_GATHER(item) | Do not use a parallel query |
| DO_NOT_SCAN(item) | Stop scanning the specified relation |
PDF page 112
Parameters
The pg_plan_advice module provides the following custom parameters.
| Parameter name | Description | Default value |
|---|---|---|
| advice | Advice on changing the execution plan | '' |
| always_explain_supplied_advice | Always include output indicating which child has had its execution plan changed in the results of the EXPLAIN statement | on |
| always_store_advice_details | Whether to output feedback for prepared statements | off |
| feedback_warnings | Whether to issue a warning if the advice was not successfully applied | off |
| trace_mask | Whether to output debug traces | off |
If the always_explain_supplied_advice parameter is set to “on” (the default value), the EXPLAIN statement will always output information about any changes to the execution plan (under the heading “Supplied Plan Advice:”). If this parameter is set to “off”, specifying the PLAN_ADVICE option in the EXPLAIN statement is required to output information about changes to the execution plan.
3.5.7 Pg_stash_advice
The new Contrib module pg_stash_advice has been added to PostgreSQL 19. The pg_stash_advice module applies execution plan advice to query IDs. By default, the generated advice is stored in memory and is not persisted. To persist the advice stash data, set the pg_stash_advice.persist parameter to “true”. The persisted data is created as the file pg_stash_advice.tsv in the database cluster. [e8ec19a, c10edb1]
| Function name | Description | Note |
|---|---|---|
| pg_create_advice_stash | Creating the Advice Stash | |
| pg_drop_advice_stash | Dropping the Advice Stash | |
| pg_set_stashed_advice | Setting advice for a query | |
| pg_get_advice_stashes | List of Advice Stashes | |
| pg_get_advice_stash_contents | Viewing the contents of the Advice Stash |
PDF page 113
The following parameters are defined in this module.
| Parameter name | Description | Default value |
|---|---|---|
| pg_stash_advice.persist | Whether to persist advice | false |
| pg_stash_advice.stash_name | Name of the active advice stash | '' |
| pg_stash_advice.persist_interval | Persistence check interval | 30s |
Preparation
Set the shared_preload_libraries parameter to pg_stash_advice. Set the compute_query_id parameter to “auto” (default value) or “on”. Next, enable the module using the CREATE EXTENSION statement.
PDF page 114
PDF page 115
3.5.8 Pg_stat_statements
The following new features have been added to the pg_stat_statements module.
PDF page 116
Changes in the pg_stat_statements view
The following columns have been added to the pg_stat_statements view. [3357471]
| Column name | Data type | Description |
|---|---|---|
| generic_plan_calls | bigint | Number of executions of the generic execution plan |
| custom_plan_calls | bigint | Number of executions of the custom execution plan |
Constancy of FETCH Statements
The number of rows specified in the FETCH statement is now treated as the constant and assigned the single query ID. [bee23ea]
PDF page 117
3.5.9 Postgres_fdw
The following features have been added to the postgres_fdw module.
Option restore_stats
The Foreign Data Wrapper now supports importing remote statistics via the callback. The postgres_fdw module implements this callback, and the restore_stats option can be specified for both the FOREIGN SERVER and the FOREIGN TABLE. [28972b6]
PDF page 118
Pushdown of ARRAY Operations
When using a generic plan, the ANY clause in the PREPARE statement can now be pushed down. [62c3b4c]
PDF page 119
Transaction State Propagation
The status of local READ ONLY and DEFERRABLE transactions is now pushed down to remote connections. [de28140]
3.5.10 Miscellaneous
In addition to what was described above, the following test extension modules have been added to the src/test/modules directory. [31280d9, e0e4c13]
| Module name | Description | Note |
|---|---|---|
| test_binaryheaptest_bitmapsettest_checksums | Binary heap testing Bitmapset testing Checksum behavior testing | |
| test_cplusplusext | C++ header compilation testing | |
| test_custom_stats | Fixed- and variable-size custom statistics testing | |
| test_custom_types | Custom type testing | |
| test_int128 | 128-bit int type testing | |
| test_lwlock_tranchestest_plan_advicetest_saslpreptest_shmem | LWLock Tranche testing pg_plan_advice module testing SASLprep implementation testing Shared memory testing |
8 URL List
The links in this chapter are preserved from the source PDF’s URL list.
PDF page 120
9 Change History
This chapter preserves the source document’s revision history and publication credits.
PDF page 121
Change history
| Version | Date | Author | Description |
|---|---|---|---|
| 1.0 | June 4, 2026 | Noriyoshi Shinoda | Created for PostgreSQL 19 Beta 1 |
| 1.0.1 | Jun 6, 2026 | Noriyoshi Shinoda | Drop 3.2.1. ALTER DEFAULT PRIVILEGE statement |