5 E.1.2. Migration to Version 18
9 Release date: 2025-09-25
13 PostgreSQL 18 contains many new features and enhancements, including:
14 * An asynchronous I/O (AIO) subsystem that can improve performance of
15 sequential scans, bitmap heap scans, vacuums, and other operations.
16 * pg_upgrade now retains optimizer statistics.
17 * Support for "skip scan" lookups that allow using multicolumn B-tree
18 indexes in more cases.
19 * uuidv7() function for generating timestamp-ordered UUIDs.
20 * Virtual generated columns that compute their values during read
21 operations. This is now the default for generated columns.
22 * OAuth authentication support.
23 * OLD and NEW support for RETURNING clauses in INSERT, UPDATE,
24 DELETE, and MERGE commands.
25 * Temporal constraints, or constraints over ranges, for PRIMARY KEY,
26 UNIQUE, and FOREIGN KEY constraints.
28 The above items and other new features of PostgreSQL 18 are explained
29 in more detail in the sections below.
31 E.1.2. Migration to Version 18 #
33 A dump/restore using pg_dumpall or use of pg_upgrade or logical
34 replication is required for those wishing to migrate data from any
35 previous release. See Section 18.6 for general information on migrating
36 to new major releases.
38 Version 18 contains a number of changes that may affect compatibility
39 with previous releases. Observe the following incompatibilities:
40 * Change initdb default to enable data checksums (Greg Sabino
42 Checksums can be disabled with the new initdb option
43 --no-data-checksums. pg_upgrade requires matching cluster checksum
44 settings, so this new option can be useful to upgrade non-checksum
46 * Change time zone abbreviation handling (Tom Lane) §
47 The system will now favor the current session's time zone
48 abbreviations before checking the server variable
49 timezone_abbreviations. Previously timezone_abbreviations was
51 * Deprecate MD5 password authentication (Nathan Bossart) §
52 Support for MD5 passwords will be removed in a future major version
53 release. CREATE ROLE and ALTER ROLE now emit deprecation warnings
54 when setting MD5 passwords. These warnings can be disabled by
55 setting the md5_password_warnings parameter to off.
56 * Change VACUUM and ANALYZE to process the inheritance children of a
57 parent (Michael Harris) §
58 The previous behavior can be performed by using the new ONLY
60 * Prevent COPY FROM from treating \. as an end-of-file marker when
61 reading CSV files (Daniel Vérité, Tom Lane) § §
62 psql will still treat \. as an end-of-file marker when reading CSV
63 files from STDIN. Older psql clients connecting to PostgreSQL 18
64 servers might experience \copy problems. This release also enforces
65 that \. must appear alone on a line.
66 * Disallow unlogged partitioned tables (Michael Paquier) §
67 Previously ALTER TABLE SET [UN]LOGGED did nothing, and the creation
68 of an unlogged partitioned table did not cause its children to be
70 * Execute AFTER triggers as the role that was active when trigger
71 events were queued (Laurenz Albe) §
72 Previously such triggers were run as the role that was active at
73 trigger execution time (e.g., at COMMIT). This is significant for
74 cases where the role is changed between queue time and transaction
76 * Remove non-functional support for rule privileges in GRANT/REVOKE
78 These have been non-functional since PostgreSQL 8.2.
79 * Remove column pg_backend_memory_contexts.parent (Melih Mutlu) §
80 This is no longer needed since pg_backend_memory_contexts.path was
82 * Change pg_backend_memory_contexts.level and
83 pg_log_backend_memory_contexts() to be one-based (Melih Mutlu,
84 Atsushi Torikoshi, David Rowley, Fujii Masao) § § §
85 These were previously zero-based.
86 * Change full text search to use the default collation provider of
87 the cluster to read configuration files and dictionaries, rather
88 than always using libc (Peter Eisentraut) §
89 Clusters that default to non-libc collation providers (e.g., ICU,
90 builtin) that behave differently than libc for characters processed
91 by LC_CTYPE could observe changes in behavior of some full-text
92 search functions, as well as the pg_trgm extension. When upgrading
93 such clusters using pg_upgrade, it is recommended to reindex all
94 indexes related to full-text search and pg_trgm after the upgrade.
98 Below you will find a detailed account of the changes between
99 PostgreSQL 18 and the previous major release.
103 E.1.3.1.1. Optimizer #
105 * Automatically remove some unnecessary table self-joins (Andrey
106 Lepikhov, Alexander Kuzmenkov, Alexander Korotkov, Alena Rybakina)
108 This optimization can be disabled using server variable
109 enable_self_join_elimination.
110 * Convert some IN (VALUES ...) to x = ANY ... for better optimizer
111 statistics (Alena Rybakina, Andrei Lepikhov) §
112 * Allow transforming OR-clauses to arrays for faster index processing
113 (Alexander Korotkov, Andrey Lepikhov) §
114 * Speed up the processing of INTERSECT, EXCEPT, window aggregates,
115 and view column aliases (Tom Lane, David Rowley) § § § §
116 * Allow the keys of SELECT DISTINCT to be internally reordered to
117 avoid sorting (Richard Guo) §
118 This optimization can be disabled using enable_distinct_reordering.
119 * Ignore GROUP BY columns that are functionally dependent on other
120 columns (Zhang Mingli, Jian He, David Rowley) §
121 If a GROUP BY clause includes all columns of a unique index, as
122 well as other columns of the same table, those other columns are
123 redundant and can be dropped from the grouping. This was already
124 true for non-deferred primary keys.
125 * Allow some HAVING clauses on GROUPING SETS to be pushed to WHERE
126 clauses (Richard Guo) § § § §
127 This allows earlier row filtering. This release also fixes some
128 GROUPING SETS queries that used to return incorrect results.
129 * Improve row estimates for generate_series() using numeric and
130 timestamp values (David Rowley, Song Jinzhou) § §
131 * Allow the optimizer to use Right Semi Join plans (Richard Guo) §
132 Semi-joins are used when needing to find if there is at least one
134 * Allow merge joins to use incremental sorts (Richard Guo) §
135 * Improve the efficiency of planning queries accessing many
136 partitions (Ashutosh Bapat, Yuya Watari, David Rowley) § §
137 * Allow partitionwise joins in more cases, and reduce its memory
138 usage (Richard Guo, Tom Lane, Ashutosh Bapat) § §
139 * Improve cost estimates of partition queries (Nikita Malakhov,
141 * Improve SQL-language function plan caching (Alexander Pyhalov, Tom
143 * Improve handling of disabled optimizer features (Robert Haas) §
147 * Allow skip scans of btree indexes (Peter Geoghegan) § §
148 This allows multi-column btree indexes to be used in more cases
149 such as when there are no restrictions on the first or early
150 indexed columns (or there are non-equality ones), and there are
151 useful restrictions on later indexed columns.
152 * Allow non-btree unique indexes to be used as partition keys and in
153 materialized views (Mark Dilger) § §
154 The index type must still support equality.
155 * Allow GIN indexes to be created in parallel (Tomas Vondra, Matthias
157 * Allow values to be sorted to speed range-type GiST and btree index
158 builds (Bernd Helmle) §
160 E.1.3.1.3. General Performance #
162 * Add an asynchronous I/O subsystem (Andres Freund, Thomas Munro,
163 Nazir Bilal Yavuz, Melanie Plageman) § § § § § § § § § § §
164 This feature allows backends to queue multiple read requests, which
165 allows for more efficient sequential scans, bitmap heap scans,
166 vacuums, etc. This is enabled by server variable io_method, with
167 server variables io_combine_limit and io_max_combine_limit added to
168 control it. This also enables effective_io_concurrency and
169 maintenance_io_concurrency values greater than zero for systems
170 without fadvise() support. The new system view pg_aios shows the
171 file handles being used for asynchronous I/O.
172 * Improve the locking performance of queries that access many
173 relations (Tomas Vondra) §
174 * Improve the performance and reduce memory usage of hash joins and
175 GROUP BY (David Rowley, Jeff Davis) § § § § §
176 This also improves hash set operations used by EXCEPT, and hash
177 lookups of subplan values.
178 * Allow normal vacuums to freeze some pages, even though they are
179 all-visible (Melanie Plageman) § §
180 This reduces the overhead of later full-relation freezing. The
181 aggressiveness of this can be controlled by server variable and
182 per-table setting vacuum_max_eager_freeze_failure_rate. Previously
183 vacuum never processed all-visible pages until freezing was
185 * Add server variable vacuum_truncate to control file truncation
186 during VACUUM (Nathan Bossart, Gurjeet Singh) §
187 A storage-level parameter with the same name and behavior already
189 * Increase server variables effective_io_concurrency's and
190 maintenance_io_concurrency's default values to 16 (Melanie
192 This more accurately reflects modern hardware.
194 E.1.3.1.4. Monitoring #
196 * Increase the logging granularity of server variable log_connections
198 This server variable was previously only boolean, which is still
200 * Add log_connections option to report the duration of connection
201 stages (Melanie Plageman) §
202 * Add log_line_prefix escape %L to output the client IP address (Greg
204 * Add server variable log_lock_failures to log lock acquisition
205 failures (Yuki Seino, Fujii Masao) § §
206 Specifically it reports SELECT ... NOWAIT lock failures.
207 * Modify pg_stat_all_tables and its variants to report the time spent
208 in VACUUM, ANALYZE, and their automatic variants (Sami Imseih) §
209 The new columns are total_vacuum_time, total_autovacuum_time,
210 total_analyze_time, and total_autoanalyze_time.
211 * Add delay time reporting to VACUUM and ANALYZE (Bertrand Drouvot,
213 This information appears in the server log, the system views
214 pg_stat_progress_vacuum and pg_stat_progress_analyze, and the
215 output of VACUUM and ANALYZE when in VERBOSE mode; tracking must be
216 enabled with the server variable track_cost_delay_timing.
217 * Add WAL, CPU, and average read statistics output to ANALYZE VERBOSE
218 (Anthonin Bonnefoy) § §
219 * Add full WAL buffer count to VACUUM/ANALYZE (VERBOSE) and
220 autovacuum log output (Bertrand Drouvot) §
221 * Add per-backend I/O statistics reporting (Bertrand Drouvot) § §
222 The statistics are accessed via pg_stat_get_backend_io().
223 Per-backend I/O statistics can be cleared via
224 pg_stat_reset_backend_stats().
225 * Add pg_stat_io columns to report I/O activity in bytes (Nazir Bilal
227 The new columns are read_bytes, write_bytes, and extend_bytes. The
228 op_bytes column, which always equaled BLCKSZ, has been removed.
229 * Add WAL I/O activity rows to pg_stat_io (Nazir Bilal Yavuz,
230 Bertrand Drouvot, Michael Paquier) § § §
231 This includes WAL receiver activity and a wait event for such
233 * Change server variable track_wal_io_timing to control tracking WAL
234 timing in pg_stat_io instead of pg_stat_wal (Bertrand Drouvot) §
235 * Remove read/sync columns from pg_stat_wal (Bertrand Drouvot) § §
236 This removes columns wal_write, wal_sync, wal_write_time, and
238 * Add function pg_stat_get_backend_wal() to return per-backend WAL
239 statistics (Bertrand Drouvot) §
240 Per-backend WAL statistics can be cleared via
241 pg_stat_reset_backend_stats().
242 * Add function pg_ls_summariesdir() to specifically list the contents
243 of PGDATA/pg_wal/summaries (Yushi Ogiwara) §
244 * Add column pg_stat_checkpointer.num_done to report the number of
245 completed checkpoints (Anton A. Melnikov) §
246 Columns num_timed and num_requested count both completed and
248 * Add column pg_stat_checkpointer.slru_written to report SLRU buffers
249 written (Nitin Jadhav) §
250 Also, modify the checkpoint server log message to report separate
251 shared buffer and SLRU buffer values.
252 * Add columns to pg_stat_database to report parallel worker activity
254 The new columns are parallel_workers_to_launch and
255 parallel_workers_launched.
256 * Have query id computation of constant lists consider only the first
257 and last constants (Dmitry Dolgov, Sami Imseih) § § §
258 Jumbling is used by pg_stat_statements.
259 * Adjust query id computations to group together queries using the
260 same relation name (Michael Paquier, Sami Imseih) §
261 This is true even if the tables in different schemas have different
263 * Add column pg_backend_memory_contexts.type to report the type of
264 memory context (David Rowley) §
265 * Add column pg_backend_memory_contexts.path to show memory context
266 parents (Melih Mutlu) §
268 E.1.3.1.5. Privileges #
270 * Add function pg_get_acl() to retrieve database access control
271 details (Joel Jacobson) § §
272 * Add function has_largeobject_privilege() to check large object
273 privileges (Yugo Nagata) §
274 * Allow ALTER DEFAULT PRIVILEGES to define large object default
275 privileges (Takatsuka Haruka, Yugo Nagata, Laurenz Albe) §
276 * Add predefined role pg_signal_autovacuum_worker (Kirill Reshke) §
277 This allows sending signals to autovacuum workers.
279 E.1.3.1.6. Server Configuration #
281 * Add support for the OAuth authentication method (Jacob Champion,
282 Daniel Gustafsson, Thomas Munro) §
283 This adds an oauth authentication method to pg_hba.conf, libpq
284 OAuth options, a server variable oauth_validator_libraries to load
285 token validation libraries, and a configure flag --with-libcurl to
286 add the required compile-time libraries.
287 * Add server variable ssl_tls13_ciphers to allow specification of
288 multiple colon-separated TLSv1.3 cipher suites (Erica Zhang, Daniel
290 * Change server variable ssl_groups's default to include elliptic
291 curve X25519 (Daniel Gustafsson, Jacob Champion) §
292 * Rename server variable ssl_ecdh_curve to ssl_groups and allow
293 multiple colon-separated ECDH curves to be specified (Erica Zhang,
295 The previous name still works.
296 * Make cancel request keys 256 bits (Heikki Linnakangas, Jelte
298 This is only possible when the server and client support wire
299 protocol version 3.2, introduced in this release.
300 * Add server variable autovacuum_worker_slots to specify the maximum
301 number of background workers (Nathan Bossart) §
302 With this variable set, autovacuum_max_workers can be adjusted at
303 runtime up to this maximum without a server restart.
304 * Allow specification of the fixed number of dead tuples that will
305 trigger an autovacuum (Nathan Bossart, Frédéric Yhuel) §
306 The server variable is autovacuum_vacuum_max_threshold. Percentages
307 are still used for triggering.
308 * Change server variable max_files_per_process to limit only files
309 opened by a backend (Andres Freund) §
310 Previously files opened by the postmaster were also counted toward
312 * Add server variable num_os_semaphores to report the required number
313 of semaphores (Nathan Bossart) §
314 This is useful for operating system configuration.
315 * Add server variable extension_control_path to specify the location
316 of extension control files (Peter Eisentraut, Matheus Alcantara) §
319 E.1.3.1.7. Streaming Replication and Recovery #
321 * Allow inactive replication slots to be automatically invalidated
322 using server variable idle_replication_slot_timeout (Nisha Moond,
324 * Add server variable max_active_replication_origins to control the
325 maximum active replication origins (Euler Taveira) §
326 This was previously controlled by max_replication_slots, but this
327 new setting allows a higher origin count in cases where fewer slots
330 E.1.3.1.8. Logical Replication #
332 * Allow the values of generated columns to be logically replicated
333 (Shubham Khanna, Vignesh C, Zhijie Hou, Shlok Kyal, Peter Smith) §
335 If the publication specifies a column list, all specified columns,
336 generated and non-generated, are published. Without a specified
337 column list, publication option publish_generated_columns controls
338 whether generated columns are published. Previously generated
339 columns were not replicated and the subscriber had to compute the
340 values if possible; this is particularly useful for non-PostgreSQL
341 subscribers which lack such a capability.
342 * Change the default CREATE SUBSCRIPTION streaming option from off to
343 parallel (Vignesh C) §
344 * Allow ALTER SUBSCRIPTION to change the replication slot's two-phase
345 commit behavior (Hayato Kuroda, Ajin Cherian, Amit Kapila, Zhijie
347 * Log conflicts while applying logical replication changes (Zhijie
348 Hou, Nisha Moond) § § § § §
349 Also report in new columns of pg_stat_subscription_stats.
351 E.1.3.2. Utility Commands #
353 * Allow generated columns to be virtual, and make them the default
354 (Peter Eisentraut, Jian He, Richard Guo, Dean Rasheed) § § §
355 Virtual generated columns generate their values when the columns
356 are read, not written. The write behavior can still be specified
357 via the STORED option.
358 * Add OLD/NEW support to RETURNING in DML queries (Dean Rasheed) §
359 Previously RETURNING only returned new values for INSERT and
360 UPDATE, and old values for DELETE; MERGE would return the
361 appropriate value for the internal query executed. This new syntax
362 allows the RETURNING list of INSERT/UPDATE/DELETE/MERGE to
363 explicitly return old and new values by using the special aliases
364 old and new. These aliases can be renamed to avoid identifier
366 * Allow foreign tables to be created like existing local tables
368 The syntax is CREATE FOREIGN TABLE ... LIKE.
369 * Allow LIKE with nondeterministic collations (Peter Eisentraut) §
370 * Allow text position search functions with nondeterministic
371 collations (Peter Eisentraut) §
372 These used to generate an error.
373 * Add builtin collation provider PG_UNICODE_FAST (Jeff Davis) §
374 This locale supports case mapping, but sorts in code point order,
375 not natural language order.
376 * Allow VACUUM and ANALYZE to process partitioned tables without
377 processing their children (Michael Harris) §
378 This is enabled with the new ONLY option. This is useful since
379 autovacuum does not process partitioned tables, just its children.
380 * Add functions to modify per-relation and per-column optimizer
381 statistics (Corey Huinker) § § §
382 The functions are pg_restore_relation_stats(),
383 pg_restore_attribute_stats(), pg_clear_relation_stats(), and
384 pg_clear_attribute_stats().
385 * Add server variable file_copy_method to control the file copying
386 method (Nazir Bilal Yavuz) §
387 This controls whether CREATE DATABASE ... STRATEGY=FILE_COPY and
388 ALTER DATABASE ... SET TABLESPACE uses file copy or clone.
390 E.1.3.2.1. Constraints #
392 * Allow the specification of non-overlapping PRIMARY KEY, UNIQUE, and
393 foreign key constraints (Paul A. Jungwirth) § §
394 This is specified by WITHOUT OVERLAPS for PRIMARY KEY and UNIQUE,
395 and by PERIOD for foreign keys, all applied to the last specified
397 * Allow CHECK and foreign key constraints to be specified as NOT
398 ENFORCED (Amul Sul) § §
399 This also adds column pg_constraint.conenforced.
400 * Require primary/foreign key relationships to use either
401 deterministic collations or the the same nondeterministic
402 collations (Peter Eisentraut) §
403 The restore of a pg_dump, also used by pg_upgrade, will fail if
404 these requirements are not met; schema changes must be made for
405 these upgrade methods to succeed.
406 * Store column NOT NULL specifications in pg_constraint (Álvaro
407 Herrera, Bernd Helmle) § §
408 This allows names to be specified for NOT NULL constraint. This
409 also adds NOT NULL constraints to foreign tables and NOT NULL
410 inheritance control to local tables.
411 * Allow ALTER TABLE to set the NOT VALID attribute of NOT NULL
412 constraints (Rushabh Lathia, Jian He) §
413 * Allow modification of the inheritability of NOT NULL constraints
414 (Suraj Kharage, Álvaro Herrera) § §
415 The syntax is ALTER TABLE ... ALTER CONSTRAINT ... [NO] INHERIT.
416 * Allow NOT VALID foreign key constraints on partitioned tables (Amul
418 * Allow dropping of constraints ONLY on partitioned tables (Álvaro
420 This was previously erroneously prohibited.
424 * Add REJECT_LIMIT to control the number of invalid rows COPY FROM
425 can ignore (Atsushi Torikoshi) §
426 This is available when ON_ERROR = 'ignore'.
427 * Allow COPY TO to copy rows from populated materialized views (Jian
429 * Add COPY LOG_VERBOSITY level silent to suppress log output of
430 ignored rows (Atsushi Torikoshi) §
431 This new level suppresses output for discarded input rows when
433 * Disallow COPY FREEZE on foreign tables (Nathan Bossart) §
434 Previously, the COPY worked but the FREEZE was ignored, so disallow
439 * Automatically include BUFFERS output in EXPLAIN ANALYZE (Guillaume
440 Lelarge, David Rowley) §
441 * Add full WAL buffer count to EXPLAIN (WAL) output (Bertrand
443 * In EXPLAIN ANALYZE, report the number of index lookups used per
444 index scan node (Peter Geoghegan) §
445 * Modify EXPLAIN to output fractional row counts (Ibrar Ahmed, Ilia
446 Evdokimov, Robert Haas) § §
447 * Add memory and disk usage details to Material, Window Aggregate,
448 and common table expression nodes to EXPLAIN output (David Rowley,
449 Tatsuo Ishii) § § § §
450 * Add details about window function arguments to EXPLAIN output (Tom
452 * Add Parallel Bitmap Heap Scan worker cache statistics to EXPLAIN
453 ANALYZE (David Geier, Heikki Linnakangas, Donghang Lin, Alena
454 Rybakina, David Rowley) §
455 * Indicate disabled nodes in EXPLAIN ANALYZE output (Robert Haas,
456 David Rowley, Laurenz Albe) § § §
458 E.1.3.3. Data Types #
460 * Improve Unicode full case mapping and conversion (Jeff Davis) § §
461 This adds the ability to do conditional and title case mapping, and
462 case map single characters to multiple characters.
463 * Allow jsonb null values to be cast to scalar types as NULL (Tom
465 Previously such casts generated an error.
466 * Add optional parameter to json{b}_strip_nulls to allow removal of
467 null array elements (Florents Tselai) §
468 * Add function array_sort() which sorts an array's first dimension
469 (Junwang Zhao, Jian He) §
470 * Add function array_reverse() which reverses an array's first
471 dimension (Aleksander Alekseev) §
472 * Add function reverse() to reverse bytea bytes (Aleksander Alekseev)
474 * Allow casting between integer types and bytea (Aleksander Alekseev)
476 The integer values are stored as bytea two's complement values.
477 * Update Unicode data to Unicode 16.0.0 (Peter Eisentraut) §
478 * Add full text search stemming for Estonian (Tom Lane) §
479 * Improve the XML error codes to more closely match the SQL standard
481 These errors are reported via SQLSTATE.
485 * Add function casefold() to allow for more sophisticated
486 case-insensitive matching (Jeff Davis) §
487 This allows more accurate comparisons, i.e., a character can have
488 multiple upper or lower case equivalents, or upper or lower case
489 conversion changes the number of characters.
490 * Allow MIN()/MAX() aggregates on arrays and composite types
491 (Aleksander Alekseev, Marat Buharov) § §
492 * Add a WEEK option to EXTRACT() (Tom Lane) §
493 * Improve the output EXTRACT(QUARTER ...) for negative values (Tom
495 * Add roman numeral support to to_number() (Hunaid Sohail) §
496 This is accessed via the RN pattern.
497 * Add UUID version 7 generation function uuidv7() (Andrey Borodin) §
498 This UUID value is temporally sortable. Function alias uuidv4() has
499 been added to explicitly generate version 4 UUIDs.
500 * Add functions crc32() and crc32c() to compute CRC values
501 (Aleksander Alekseev) §
502 * Add math functions gamma() and lgamma() (Dean Rasheed) §
503 * Allow => syntax for named cursor arguments in PL/pgSQL (Pavel
505 We previously only accepted :=.
507 regexp_match[es]()/regexp_like()/regexp_replace()/regexp_count()/re
508 gexp_instr()/regexp_substr()/regexp_split_to_table()/regexp_split_t
509 o_array() to use named arguments (Jian He) §
513 * Add function PQfullProtocolVersion() to report the full, including
514 minor, protocol version number (Jacob Champion, Jelte Fennema-Nio)
516 * Add libpq connection parameters and environment variables to
517 specify the minimum and maximum acceptable protocol version for
518 connections (Jelte Fennema-Nio) § §
519 * Report search_path changes to the client (Alexander Kukushkin,
520 Jelte Fennema-Nio, Tomas Vondra) § §
521 * Add PQtrace() output for all message types, including
522 authentication (Jelte Fennema-Nio) § § § § §
523 * Add libpq connection parameter sslkeylogfile which dumps out SSL
524 key material (Abhishek Chanda, Daniel Gustafsson) §
525 This is useful for debugging.
526 * Modify some libpq function signatures to use int64_t (Thomas Munro)
528 These previously used pg_int64, which is now deprecated.
532 * Allow psql to parse, bind, and close named prepared statements
533 (Anthonin Bonnefoy, Michael Paquier) § §
534 This is accomplished with new commands \parse, \bind_named, and
536 * Add psql backslash commands to allowing issuance of pipeline
537 queries (Anthonin Bonnefoy) § § §
538 The new commands are \startpipeline, \syncpipeline, \sendpipeline,
539 \endpipeline, \flushrequest, \flush, and \getresults.
540 * Allow adding pipeline status to the psql prompt and add related
541 state variables (Anthonin Bonnefoy) §
542 The new prompt character is %P and the new psql variables are
543 PIPELINE_SYNC_COUNT, PIPELINE_COMMAND_COUNT, and
544 PIPELINE_RESULT_COUNT.
545 * Allow adding the connection service name to the psql prompt or
546 access it via psql variable (Michael Banck) §
547 * Add psql option to use expanded mode on all list commands (Dean
549 Adding backslash suffix x enables this.
550 * Change psql's \conninfo to use tabular format and include more
551 information (Álvaro Herrera, Maiquel Grassi, Hunaid Sohail) §
552 * Add function's leakproof indicator to psql's \df+, \do+, \dAo+, and
553 \dC+ outputs (Yugo Nagata) §
554 * Add access method details for partitioned relations in \dP+ (Justin
556 * Add default_version to the psql \dx extension output (Magnus
558 * Add psql variable WATCH_INTERVAL to set the default \watch wait
559 time (Daniel Gustafsson) §
561 E.1.3.7. Server Applications #
563 * Change initdb to default to enabling checksums (Greg Sabino
565 The new initdb option --no-data-checksums disables checksums.
566 * Add initdb option --no-sync-data-files to avoid syncing heap/index
567 files (Nathan Bossart) §
568 initdb option --no-sync is still available to avoid syncing any
570 * Add vacuumdb option --missing-stats-only to compute only missing
571 optimizer statistics (Corey Huinker, Nathan Bossart) § §
572 This option can only be run by superusers and can only be used with
573 options --analyze-only and --analyze-in-stages.
574 * Add pg_combinebackup option -k/--link to enable hard linking
575 (Israel Barth Rubio, Robert Haas) §
576 Only some files can be hard linked. This should not be used if the
577 backups will be used independently.
578 * Allow pg_verifybackup to verify tar-format backups (Amul Sul) §
579 * If pg_rewind's --source-server specifies a database name, use it in
580 --write-recovery-conf output (Masahiko Sawada) §
581 * Add pg_resetwal option --char-signedness to change the default char
582 signedness (Masahiko Sawada) §
584 E.1.3.7.1. pg_dump/pg_dumpall/pg_restore #
586 * Add pg_dump option --statistics (Jeff Davis) § §
587 * Add pg_dump and pg_dumpall option --sequence-data to dump sequence
588 data that would normally be excluded (Nathan Bossart) § §
589 * Add pg_dump, pg_dumpall, and pg_restore options --statistics-only,
590 --no-statistics, --no-data, and --no-schema (Corey Huinker, Jeff
592 * Add option --no-policies to disable row level security policy
593 processing in pg_dump, pg_dumpall, pg_restore (Nikolay Samokhvalov)
595 This is useful for migrating to systems with different policies.
597 E.1.3.7.2. pg_upgrade #
599 * Allow pg_upgrade to preserve optimizer statistics (Corey Huinker,
600 Jeff Davis, Nathan Bossart) § § § §
601 Extended statistics are not preserved. Also add pg_upgrade option
602 --no-statistics to disable statistics preservation.
603 * Allow pg_upgrade to process database checks in parallel (Nathan
604 Bossart) § § § § § § § § § § §
605 This is controlled by the existing --jobs option.
606 * Add pg_upgrade option --swap to swap directories rather than copy,
607 clone, or link files (Nathan Bossart) §
608 This mode is potentially the fastest.
609 * Add pg_upgrade option --set-char-signedness to set the default char
610 signedness of new cluster (Masahiko Sawada) § §
611 This is to handle cases where a pre-PostgreSQL 18 cluster's default
612 CPU signedness does not match the new cluster.
614 E.1.3.7.3. Logical Replication Applications #
616 * Add pg_createsubscriber option --all to create logical replicas for
617 all databases (Shubham Khanna) §
618 * Add pg_createsubscriber option --clean to remove publications
620 * Add pg_createsubscriber option --enable-two-phase to enable
621 prepared transactions (Shubham Khanna) §
622 * Add pg_recvlogical option --enable-failover to specify failover
623 slots (Hayato Kuroda) §
624 Also add option --enable-two-phase as a synonym for --two-phase,
625 and deprecate the latter.
626 * Allow pg_recvlogical --drop-slot to work without --dbname (Hayato
629 E.1.3.8. Source Code #
631 * Separate the loading and running of injection points (Michael
632 Paquier, Heikki Linnakangas) § §
633 Injection points can now be created, but not run, via
634 INJECTION_POINT_LOAD(), and such injection points can be run via
635 INJECTION_POINT_CACHED().
636 * Support runtime arguments in injection points (Michael Paquier) §
637 * Allow inline injection point test code with
638 IS_INJECTION_POINT_ATTACHED() (Heikki Linnakangas) §
639 * Improve the performance of processing long JSON strings using SIMD
640 (Single Instruction Multiple Data) (David Rowley) §
641 * Speed up CRC32C calculations using x86 AVX-512 instructions
642 (Raghuveer Devulapalli, Paul Amonson) §
643 * Add ARM Neon and SVE CPU intrinsics for popcount (integer bit
644 counting) (Chiranmoy Bhattacharya, Devanga Susmitha, Rama Malladi)
646 * Improve the speed of numeric multiplication and division (Joel
647 Jacobson, Dean Rasheed) § § § §
648 * Add configure option --with-libnuma to enable NUMA awareness (Jakub
649 Wartak, Bertrand Drouvot) § § §
650 The function pg_numa_available() reports on NUMA awareness, and
651 system views pg_shmem_allocations_numa and pg_buffercache_numa
652 which report on shared memory distribution across NUMA nodes.
653 * Add TOAST table to pg_index to allow for very large expression
654 indexes (Nathan Bossart) §
655 * Remove column pg_attribute.attcacheoff (David Rowley) §
656 * Add column pg_class.relallfrozen (Melanie Plageman) §
657 * Add amgettreeheight, amconsistentequality, and amconsistentordering
658 to the index access method API (Mark Dilger) § §
659 * Add GiST support function stratnum() (Paul A. Jungwirth) §
660 * Record the default CPU signedness of char in pg_controldata
662 * Add support for Python "Limited API" in PL/Python (Peter
664 This helps prevent problems caused by Python 3.x version
666 * Change the minimum supported Python version to 3.6.8 (Jacob
668 * Remove support for OpenSSL versions older than 1.1.1 (Daniel
670 * If LLVM is enabled, require version 14 or later (Thomas Munro) §
671 * Add macro PG_MODULE_MAGIC_EXT to allow extensions to report their
672 name and version (Andrei Lepikhov) §
673 This information can be access via the new function
674 pg_get_loaded_modules().
675 * Document that SPI_connect()/SPI_connect_ext() always returns
676 success (SPI_OK_CONNECT) (Stepan Neretin) §
677 Errors are always reported via ereport().
678 * Add documentation section about API and ABI compatibility (David
679 Wheeler, Peter Eisentraut) §
680 * Remove the experimental designation of Meson builds on Windows
681 (Aleksander Alekseev) §
682 * Remove configure options --disable-spinlocks and --disable-atomics
684 Thirty-two-bit atomic operations are now required.
685 * Remove support for the HPPA/PA-RISC architecture (Tom Lane) §
687 E.1.3.9. Additional Modules #
689 * Add extension pg_logicalinspect to inspect logical snapshots
691 * Add extension pg_overexplain which adds debug details to EXPLAIN
692 output (Robert Haas) §
693 * Add output columns to postgres_fdw_get_connections() (Hayato
694 Kuroda, Sagar Dilip Shedge) § § § §
695 New output column used_in_xact indicates if the foreign data
696 wrapper is being used by a current transaction, closed indicates if
697 it is closed, user_name indicates the user name, and
698 remote_backend_pid indicates the remote backend process identifier.
699 * Allow SCRAM authentication from the client to be passed to
700 postgres_fdw servers (Matheus Alcantara, Peter Eisentraut) §
701 This avoids storing postgres_fdw authentication information in the
702 database, and is enabled with the postgres_fdw
703 use_scram_passthrough connection option. libpq uses new connection
704 parameters scram_client_key and scram_server_key.
705 * Allow SCRAM authentication from the client to be passed to dblink
706 servers (Matheus Alcantara) §
707 * Add on_error and log_verbosity options to file_fdw (Atsushi
709 These control how file_fdw handles and reports invalid file rows.
710 * Add reject_limit to control the number of invalid rows file_fdw can
711 ignore (Atsushi Torikoshi) §
712 This is active when ON_ERROR = 'ignore'.
713 * Add configurable variable min_password_length to passwordcheck
714 (Emanuele Musella, Maurizio Boriani) §
715 This controls the minimum password length.
716 * Have pgbench report the number of failed, retried, or skipped
717 transactions in per-script reports (Yugo Nagata) §
718 * Add isn server variable weak to control invalid check digit
719 acceptance (Viktor Holmberg) §
720 This was previously only controlled by function isn_weak().
721 * Allow values to be sorted to speed btree_gist index builds (Bernd
722 Helmle, Andrey Borodin) §
723 * Add amcheck check function gin_index_check() to verify GIN indexes
724 (Grigory Kryachko, Heikki Linnakangas, Andrey Borodin) §
725 * Add functions pg_buffercache_evict_relation() and
726 pg_buffercache_evict_all() to evict unpinned shared buffers (Nazir
728 The existing function pg_buffercache_evict() now returns the buffer
730 * Allow extensions to install custom EXPLAIN options (Robert Haas,
732 * Allow extensions to use the server's cumulative statistics API
733 (Michael Paquier) § §
735 E.1.3.9.1. pg_stat_statements #
737 * Allow the queries of CREATE TABLE AS and DECLARE to be tracked by
738 pg_stat_statements (Anthonin Bonnefoy) §
739 They are also now assigned query ids.
740 * Allow the parameterization of SET values in pg_stat_statements
741 (Greg Sabino Mullane, Michael Paquier) §
742 This reduces the bloat caused by SET statements with differing
744 * Add pg_stat_statements columns to report parallel activity
745 (Guillaume Lelarge) §
746 The new columns are parallel_workers_to_launch and
747 parallel_workers_launched.
748 * Add pg_stat_statements.wal_buffers_full to report full WAL buffers
751 E.1.3.9.2. pgcrypto #
753 * Add pgcrypto algorithms sha256crypt and sha512crypt (Bernd Helmle)
755 * Add CFB mode to pgcrypto encryption and decryption (Umar Hayat) §
756 * Add function fips_mode() to report the server's FIPS mode (Daniel
758 * Add pgcrypto server variable builtin_crypto_enabled to allow
759 disabling builtin non-FIPS mode cryptographic functions (Daniel
760 Gustafsson, Joe Conway) §
761 This is useful for guaranteeing FIPS mode behavior.
763 E.1.4. Acknowledgments #
765 The following individuals (in alphabetical order) have contributed to
766 this release as patch authors, committers, reviewers, testers, or
782 Alexander Kozhemyakin
856 Chiranmoy Bhattacharya
858 Christian Charukiewicz
866 Dagfinn Ilmari Mannsåker
923 Fabrízio de Royes Mello
986 Jehan-Guillaume de Rorthais
1025 Lakshmi Narayana Velayudam
1038 Mahendra Singh Thalor
1039 Mahendrakar Srinivasarao
1051 Marlene Brandstaetter
1065 Matthias van de Meent
1078 Michael Christofides
1089 Muralikrishna Bandaru
1141 Raghuveer Devulapalli
1169 Satyanarayana Narlapuram
1179 Shaik Mohammad Mujeeb
1192 Soumyadeep Chakraborty