summaryrefslogtreecommitdiffstats
path: root/doc/src/sgml/html/release-15-3.html
blob: 3b7747b454faec088464b4db23ede1107d5cb2b3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>E.4. Release 15.3</title><link rel="stylesheet" type="text/css" href="stylesheet.css" /><link rev="made" href="pgsql-docs@lists.postgresql.org" /><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><link rel="prev" href="release-15-4.html" title="E.3. Release 15.4" /><link rel="next" href="release-15-2.html" title="E.5. Release 15.2" /></head><body id="docContent" class="container-fluid col-10"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="5" align="center">E.4. Release 15.3</th></tr><tr><td width="10%" align="left"><a accesskey="p" href="release-15-4.html" title="E.3. Release 15.4">Prev</a> </td><td width="10%" align="left"><a accesskey="u" href="release.html" title="Appendix E. Release Notes">Up</a></td><th width="60%" align="center">Appendix E. Release Notes</th><td width="10%" align="right"><a accesskey="h" href="index.html" title="PostgreSQL 15.6 Documentation">Home</a></td><td width="10%" align="right"> <a accesskey="n" href="release-15-2.html" title="E.5. Release 15.2">Next</a></td></tr></table><hr /></div><div class="sect1" id="RELEASE-15-3"><div class="titlepage"><div><div><h2 class="title" style="clear: both">E.4. Release 15.3</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="sect2"><a href="release-15-3.html#id-1.11.6.8.4">E.4.1. Migration to Version 15.3</a></span></dt><dt><span class="sect2"><a href="release-15-3.html#id-1.11.6.8.5">E.4.2. Changes</a></span></dt></dl></div><p><strong>Release date: </strong>2023-05-11</p><p>
   This release contains a variety of fixes from 15.2.
   For information about new features in major release 15, see
   <a class="xref" href="release-15.html" title="E.7. Release 15">Section E.7</a>.
  </p><div class="sect2" id="id-1.11.6.8.4"><div class="titlepage"><div><div><h3 class="title">E.4.1. Migration to Version 15.3</h3></div></div></div><p>
    A dump/restore is not required for those running 15.X.
   </p><p>
    However, if you are upgrading from a version earlier than 15.1,
    see <a class="xref" href="release-15-1.html" title="E.6. Release 15.1">Section E.6</a>.
   </p></div><div class="sect2" id="id-1.11.6.8.5"><div class="titlepage"><div><div><h3 class="title">E.4.2. Changes</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
      Prevent <code class="command">CREATE SCHEMA</code> from defeating changes
      in <code class="varname">search_path</code> (Alexander Lakhin)
     </p><p>
      Within a <code class="command">CREATE SCHEMA</code> command, objects in the
      prevailing <code class="varname">search_path</code>, as well as those in the
      newly-created schema, would be visible even within a called
      function or script that attempted to set a
      secure <code class="varname">search_path</code>.  This could allow any user
      having permission to create a schema to hijack the privileges of a
      security definer function or extension script.
     </p><p>
      The <span class="productname">PostgreSQL</span> Project thanks
      Alexander Lakhin for reporting this problem.
      (CVE-2023-2454)
     </p></li><li class="listitem"><p>
      Enforce row-level security policies correctly after inlining a
      set-returning function (Stephen Frost, Tom Lane)
     </p><p>
      If a set-returning SQL-language function refers to a table having
      row-level security policies, and it can be inlined into a calling
      query, those RLS policies would not get enforced properly in some
      cases involving re-using a cached plan under a different role.
      This could allow a user to see or modify rows that should have been
      invisible.
     </p><p>
      The <span class="productname">PostgreSQL</span> Project thanks
      Wolfgang Walther for reporting this problem.
      (CVE-2023-2455)
     </p></li><li class="listitem"><p>
      Fix potential corruption of the template (source) database after
      <code class="command">CREATE DATABASE</code> with the <code class="literal">STRATEGY
      WAL_LOG</code> option (Nathan Bossart, Ryo Matsumura)
     </p><p>
      Improper buffer handling created a risk that any later modification
      of the template's <code class="structname">pg_class</code> catalog would be
      lost.
     </p></li><li class="listitem"><p>
      Fix memory leakage and unnecessary disk reads
      during <code class="command">CREATE DATABASE</code> with the <code class="literal">STRATEGY
      WAL_LOG</code> option (Andres Freund)
     </p></li><li class="listitem"><p>
      Avoid crash when the new schema name is omitted
      in <code class="command">CREATE SCHEMA</code> (Michael Paquier)
     </p><p>
      The SQL standard allows writing <code class="literal">CREATE SCHEMA AUTHORIZATION
      <em class="replaceable"><code>owner_name</code></em></code>, with the schema
      name defaulting to <em class="replaceable"><code>owner_name</code></em>.  However
      some code paths expected the schema name to be present and would
      fail.
     </p></li><li class="listitem"><p>
      Fix various planner failures with <code class="command">MERGE</code>
      commands (Tom Lane)
     </p><p>
      Planning could fail with errors like <span class="quote"><span class="quote">variable not found in
      subplan target list</span></span> or <span class="quote"><span class="quote">PlaceHolderVar found where not
      expected</span></span>.
     </p></li><li class="listitem"><p>
      Fix the row count reported by <code class="command">MERGE</code> for some
      corner cases (Dean Rasheed)
     </p><p>
      The row count reported in the command tag counted rows that actually
      hadn't been modified due to a <code class="literal">BEFORE ROW</code> trigger
      returning NULL.  This is inconsistent with what happens in
      plain <code class="command">UPDATE</code> or <code class="command">DELETE</code>, so
      change it to not count such rows.  Also, avoid counting a row twice
      when <code class="command">MERGE</code> moves it into a different partition of
      a partitioned table.
     </p></li><li class="listitem"><p>
      Fix <code class="command">MERGE</code> problems with concurrent updates
      (Dean Rasheed, Álvaro Herrera)
     </p><p>
      Some cases misbehaved if a row to be updated or deleted
      by <code class="command">MERGE</code> had just been updated by a concurrent
      transaction.  This could lead to a crash, or the wrong merge action
      being executed, or no action at all.
     </p></li><li class="listitem"><p>
      Add support for decompiling <code class="command">MERGE</code>
      commands (Álvaro Herrera)
     </p><p>
      This was overlooked when <code class="command">MERGE</code> was added, but
      it's essential support for <code class="command">MERGE</code> in new-style SQL
      functions.
     </p></li><li class="listitem"><p>
      Fix enabling/disabling of foreign-key triggers in partitioned tables
      (Tom Lane)
     </p><p>
      <code class="command">ALTER TABLE ... ENABLE/DISABLE TRIGGER</code> failed if
      applied to a partitioned table's foreign-key enforcement triggers,
      because it tried to locate the clone triggers for the partitions by
      name, and they do not have the same name.  Locate them by
      parent-trigger OID instead.
     </p></li><li class="listitem"><p>
      Disallow altering composite types that are stored in indexes
      (Tom Lane)
     </p><p>
      <code class="command">ALTER TYPE</code> disallows non-binary-compatible
      modifications of composite types if they are stored in any table
      columns.  (Perhaps that will be allowed someday, but it hasn't
      happened yet; the locking implications of rewriting many tables are
      daunting.)  We overlooked the possibility that an index might
      contain a composite type that doesn't also appear in its table.
     </p></li><li class="listitem"><p>
      Disallow system columns as elements of foreign keys (Tom Lane)
     </p><p>
      Since the removal of OID as a system column, there is no plausible
      use-case for this, and various bits of code no longer support it.
      Disallow it rather than trying to fix all the cases.
     </p></li><li class="listitem"><p>
      Ensure that <code class="command">COPY TO</code> from an RLS-enabled parent
      table does not copy any rows from child tables (Antonin Houska)
     </p><p>
      The documentation is quite clear that <code class="command">COPY TO</code>
      copies rows from only the named table, not any inheritance children
      it may have.  However, if row-level security was enabled on the table
      then this stopped being true.
     </p></li><li class="listitem"><p>
      Avoid possible crash when <code class="function">array_position()</code>
      or <code class="function">array_positions()</code> is passed an empty array
      (Tom Lane)
     </p></li><li class="listitem"><p>
      Fix possible out-of-bounds fetch in <code class="function">to_char()</code>
      (Tom Lane)
     </p><p>
      With bad luck this could have resulted in a server crash.
     </p></li><li class="listitem"><p>
      Avoid buffer overread in <code class="function">translate()</code> function
      (Daniil Anisimov)
     </p><p>
      When using the deletion feature, the function might fetch the byte
      just after the input string, creating a small risk of crash.
     </p></li><li class="listitem"><p>
      Adjust text-search-related character classification logic to
      correctly detect whether the prevailing locale
      is <code class="literal">C</code> (Jeff Davis)
     </p><p>
      This code got confused if the database's default collation uses ICU.
     </p></li><li class="listitem"><p>
      Avoid possible crash on empty input for type <code class="type">interval</code>
      (Tom Lane)
     </p></li><li class="listitem"><p>
      Re-allow exponential notation in ISO-8601 interval fields
      (Tom Lane)
     </p><p>
      Interval input like <code class="literal">P0.1e10D</code> isn't officially
      sanctioned by ISO-8601, but we accepted it for a long time before
      version 15, so re-allow it.
     </p></li><li class="listitem"><p>
      Fix error cursor setting for parse errors in JSON string literals
      (Tom Lane)
     </p><p>
      Most cases in which a syntax error is detected in a string literal
      within a JSON value failed to set the error cursor appropriately.
      This led at least to an unhelpful error message (pointing to the
      token before the string, rather than the actual trouble spot), and
      could even result in a crash in v14 and later.
     </p></li><li class="listitem"><p>
      Fix data corruption due to <code class="varname">vacuum_defer_cleanup_age</code>
      being larger than the current 64-bit xid (Andres Freund)
     </p><p>
      In v14 and later with non-default settings
      of <code class="varname">vacuum_defer_cleanup_age</code>, it was possible to
      compute a very large vacuum cleanup horizon xid, leading to vacuum
      removing rows that are still live.  v12 and v13 have a lesser form
      of the same problem affecting only GiST indexes, which could lead to
      index pages getting recycled too early.
     </p></li><li class="listitem"><p>
      Fix parser's failure to detect some cases of improperly-nested
      aggregates (Tom Lane)
     </p><p>
      This oversight could lead to executor failures for queries that
      should have been rejected as invalid.
     </p></li><li class="listitem"><p>
      Fix data structure corruption during parsing of
      serial <code class="literal">SEQUENCE NAME</code> options (David Rowley)
     </p><p>
      This can lead to trouble if an event trigger captures the corrupted
      parse tree.
     </p></li><li class="listitem"><p>
      Correctly update plan nodes' parallel-safety markings when moving
      initplans from one node to another (Tom Lane)
     </p><p>
      This planner oversight could lead to <span class="quote"><span class="quote">subplan was not
      initialized</span></span> errors at runtime.
     </p></li><li class="listitem"><p>
      Avoid failure with PlaceHolderVars in extended-statistics code
      (Tom Lane)
     </p><p>
      Use of dependency-type extended statistics could fail with
      <span class="quote"><span class="quote">PlaceHolderVar found where not expected</span></span>.
     </p></li><li class="listitem"><p>
      Fix incorrect tests for whether a qual clause applied to a subquery
      can be transformed into a window aggregate <span class="quote"><span class="quote">run
      condition</span></span> within the subquery (David Rowley)
     </p><p>
      A SubPlan within such a clause would cause assertion failures or
      incorrect answers, as would some other unusual cases.
     </p></li><li class="listitem"><p>
      Disable the inverse-transition optimization for window aggregates
      when the call contains sub-SELECTs (David Rowley)
     </p><p>
      This optimization requires that the aggregate's argument expressions
      have repeatable results, which might not hold for a sub-SELECT.
     </p></li><li class="listitem"><p>
      Fix oversights in execution of nested <code class="literal">ARRAY[]</code>
      constructs (Alexander Lakhin, Tom Lane)
     </p><p>
      Correctly detect overflow of the total space needed for the result
      array, avoiding a possible crash due to undersized output
      allocation.  Also ensure that any trailing padding space in the
      result array is zeroed; while leaving garbage there is harmless for
      most purposes, it can result in odd behavior later.
     </p></li><li class="listitem"><p>
      Prevent crash when updating a field within an
      array-of-domain-over-composite-type column (Dmitry Dolgov)
     </p></li><li class="listitem"><p>
      Fix partition pruning logic for partitioning on boolean columns
      (David Rowley)
     </p><p>
      Pruning with a condition like <code class="literal">boolcol IS NOT TRUE</code>
      was done incorrectly, leading to possibly not returning rows in
      which <code class="literal">boolcol</code> is NULL.  Also, the rather unlikely
      case of partitioning on <code class="literal">NOT boolcol</code> was handled
      incorrectly.
     </p></li><li class="listitem"><p>
      Fix race condition in per-batch cleanup during parallel hash join
      (Thomas Munro, Melanie Plageman)
     </p><p>
      A crash was possible given unlucky timing and
      <code class="varname">parallel_leader_participation</code>
      = <code class="literal">off</code> (which is not the default).
     </p></li><li class="listitem"><p>
      Recalculate <code class="literal">GENERATED</code> columns after an
      EvalPlanQual check (Tom Lane)
     </p><p>
      In <code class="literal">READ COMMITTED</code> isolation mode, the effects of
      a row update might need to get reapplied to a newer version of the
      row than the query found originally.  If so, we need to recompute
      any <code class="literal">GENERATED</code> columns, in case they depend on
      columns that were changed by the concurrent update.
     </p></li><li class="listitem"><p>
      Fix memory leak in Memoize plan execution (David Rowley)
     </p></li><li class="listitem"><p>
      Fix buffer refcount leak when using batched inserts for a foreign
      table included in a partitioned tree (Alexander Pyhalov)
     </p></li><li class="listitem"><p>
      Restore support for
      sub-millisecond <code class="varname">vacuum_cost_delay</code> settings
      (Thomas Munro)
     </p></li><li class="listitem"><p>
      Don't balance vacuum cost delay when a table has a
      per-relation <code class="varname">vacuum_cost_delay</code> setting of zero
      (Masahiko Sawada)
     </p><p>
      Delay balancing is supposed to be disabled whenever autovacuum is
      processing a table with a
      per-relation <code class="varname">vacuum_cost_delay</code> setting, but this
      was done only for positive settings, not zero.
     </p></li><li class="listitem"><p>
      Fix corner-case crashes when columns have been added to the end of a
      view (Tom Lane)
     </p></li><li class="listitem"><p>
      Repair rare failure of MULTIEXPR_SUBLINK subplans in partitioned
      updates (Andres Freund, Tom Lane)
     </p><p>
      Use of the syntax <code class="literal">INSERT ... ON CONFLICT DO UPDATE SET (c1,
      ...) = (SELECT ...)</code> with a partitioned target table could
      result in failure if any child table is dissimilar from the parent
      (for example, different physical column order).
      This typically manifested as failure of consistency checks in the
      executor; but a crash or incorrect data updates are also possible.
     </p></li><li class="listitem"><p>
      Fix handling of <code class="literal">DEFAULT</code> markers within a
      multi-row <code class="literal">INSERT ... VALUES</code> query on a view that
      has a <code class="literal">DO ALSO INSERT ... SELECT</code> rule (Dean
      Rasheed)
     </p><p>
      Such cases typically failed with <span class="quote"><span class="quote">unrecognized node
      type</span></span> errors or assertion failures.
     </p></li><li class="listitem"><p>
      Support references to <code class="literal">OLD</code>
      and <code class="literal">NEW</code> within subqueries in rule actions
      (Dean Rasheed, Tom Lane)
     </p><p>
      Such references are really lateral references, but the server could
      crash if the subquery wasn't explicitly marked
      with <code class="literal">LATERAL</code>.  Arrange to do that implicitly when
      necessary.
     </p></li><li class="listitem"><p>
      When decompiling a rule or SQL function body
      containing <code class="command">INSERT</code>/<code class="command">UPDATE</code>/<code class="command">DELETE</code>
      within <code class="command">WITH</code>, take care to print the correct alias
      for the target table (Tom Lane)
     </p></li><li class="listitem"><p>
      Fix glitches in <code class="literal">SERIALIZABLE READ ONLY</code>
      optimization (Thomas Munro)
     </p><p>
      Transactions already marked as <span class="quote"><span class="quote">doomed</span></span> confused the
      safe-snapshot optimization for <code class="literal">SERIALIZABLE READ
      ONLY</code> transactions.  The optimization was unnecessarily
      skipped in some cases.  In other cases an assertion failure occurred
      (but there was no problem in non-assert builds).
     </p></li><li class="listitem"><p>
      Avoid leaking cache callback slots in
      the <code class="literal">pgoutput</code> logical decoding plugin (Shi Yu)
     </p><p>
      Multiple cycles of starting up and shutting down the plugin within a
      single session would eventually lead to an <span class="quote"><span class="quote">out of
      relcache_callback_list slots</span></span> error.
     </p></li><li class="listitem"><p>
      Avoid unnecessary calls to custom validators for index operator
      class options (Alexander Korotkov)
     </p><p>
      This change fixes some cases where an unexpected error was thrown.
     </p></li><li class="listitem"><p>
      Avoid useless work while scanning a multi-column BRIN index with
      multiple scan keys (Tomas Vondra)
     </p><p>
      The existing code effectively considered only the last scan key
      while deciding whether a range matched, thus usually scanning more
      of the index than it needed to.
     </p></li><li class="listitem"><p>
      Fix netmask handling in BRIN inet_minmax_multi_ops opclass
      (Tomas Vondra)
     </p><p>
      This error triggered an assertion failure in assert-enabled builds,
      but is mostly harmless in production builds.
     </p></li><li class="listitem"><p>
      Fix dereference of dangling pointer during buffering build of a GiST
      index (Alexander Lakhin)
     </p><p>
      This error seems to usually be harmless in production builds, as the
      fetched value is noncritical; but in principle it could cause a
      server crash.
     </p></li><li class="listitem"><p>
      Ignore dropped columns and generated columns during logical
      replication of an update or delete action (Onder Kalaci, Shi Yu)
     </p><p>
      Replication with the <code class="literal">REPLICA IDENTITY FULL</code> option
      failed if the table contained such columns.
     </p></li><li class="listitem"><p>
      Correct the name of the wait event for SLRU buffer I/O for commit
      timestamps (Alexander Lakhin)
     </p><p>
      This wait event is named <code class="literal">CommitTsBuffer</code> according
      to the documentation, but the code had it
      as <code class="literal">CommitTSBuffer</code>.  Change the code to match the
      documentation, as that way is more consistent with the naming of
      related wait events.
     </p></li><li class="listitem"><p>
      Re-activate reporting of wait event <code class="literal">SLRUFlushSync</code>
      (Thomas Munro)
     </p><p>
      Reporting of this type of wait was accidentally removed in code
      refactoring.
     </p></li><li class="listitem"><p>
      Avoid possible underflow when calculating how many WAL segments to
      keep (Kyotaro Horiguchi)
     </p><p>
      This could result in not honoring <code class="varname">wal_keep_size</code>
      accurately.
     </p></li><li class="listitem"><p>
      Disable startup progress reporting overhead in standby mode
      (Bharath Rupireddy)
     </p><p>
      In standby mode, we don't actually report progress of recovery,
      but we were doing work to track it anyway.
     </p></li><li class="listitem"><p>
      Support RSA-PSS certificates with SCRAM-SHA-256 channel binding
      (Jacob Champion, Heikki Linnakangas)
     </p><p>
      This feature requires building with OpenSSL 1.1.1 or newer.  Both
      the server and <span class="application">libpq</span> are affected.
     </p></li><li class="listitem"><p>
      Avoid race condition with process ID tracking on Windows (Thomas Munro)
     </p><p>
      The operating system could recycle a PID before the postmaster
      observed that that child process was gone.  This could lead to
      tracking more than one child with the same PID, resulting in
      confusion.
     </p></li><li class="listitem"><p>
      Fix <code class="function">list_copy_head()</code> to work correctly on an
      empty List (David Rowley)
     </p><p>
      This case is not known to be reached by any
      core <span class="productname">PostgreSQL</span> code, but extensions
      might rely on it working.
     </p></li><li class="listitem"><p>
      Add missing cases to <code class="function">SPI_result_code_string()</code>
      (Dean Rasheed)
     </p></li><li class="listitem"><p>
      Fix erroneous Valgrind markings
      in <code class="function">AllocSetRealloc()</code> (Karina Litskevich)
     </p><p>
      In the unusual case where the size of a large (&gt;8kB) palloc chunk
      is decreased, a Valgrind-aware build would mismark the defined-ness
      state of the memory released from the chunk, possibly causing
      incorrect results during Valgrind testing.
     </p></li><li class="listitem"><p>
      Fix assertion failure for <code class="command">MERGE</code> into a
      partitioned table with row-level security enabled (Dean Rasheed)
     </p></li><li class="listitem"><p>
      Avoid assertion failure when decoding a transactional logical
      replication message (Tomas Vondra)
     </p></li><li class="listitem"><p>
      Avoid locale sensitivity when processing regular expression escapes
      (Jeff Davis)
     </p><p>
      A backslash followed by a non-ASCII character could sometimes cause
      an assertion failure, depending on the prevailing locale.
     </p></li><li class="listitem"><p>
      Avoid trying to write an empty WAL record
      in <code class="function">log_newpage_range()</code> when the last few pages
      in the specified range are empty (Matthias van de Meent)
     </p><p>
      It is not entirely clear whether this case is reachable in released
      branches, but if it is then an assertion failure could occur.
     </p></li><li class="listitem"><p>
      Fix session-lifespan memory leakage in <span class="application">plpgsql</span>
      <code class="literal">DO</code> blocks that use cast expressions
      (Ajit Awekar, Tom Lane)
     </p></li><li class="listitem"><p>
      Tighten array dimensionality checks when converting Perl
      list structures to multi-dimensional SQL arrays (Tom Lane)
     </p><p>
      <span class="application">plperl</span> could misbehave when the nesting
      of sub-lists is inconsistent so that the data does not represent a
      rectangular array of values.  Such cases now produce errors, but
      previously they could result in a crash or garbage output.
     </p></li><li class="listitem"><p>
      Tighten array dimensionality checks when converting Python
      list structures to multi-dimensional SQL arrays (Tom Lane)
     </p><p>
      <span class="application">plpython</span> could misbehave when dealing
      with empty sub-lists, or when the nesting of sub-lists is
      inconsistent so that the data does not represent a rectangular array
      of values.  The former should result in an empty output array, and
      the latter in an error.  But some cases resulted in a crash, and
      others in unexpected output.
     </p></li><li class="listitem"><p>
      Fix unwinding of exception stack
      in <span class="application">plpython</span> (Xing Guo)
     </p><p>
      Some rare failure cases could return without cleaning up the PG_TRY
      exception stack, risking a crash if another error was raised before
      the next stack level was unwound.
     </p></li><li class="listitem"><p>
      Fix inconsistent GSS-encryption error handling
      in <span class="application">libpq</span>'s
      <code class="function">PQconnectPoll()</code>
      (Michael Paquier)
     </p><p>
      With <code class="option">gssencmode</code> set to <code class="literal">require</code>,
      the connection was not marked dead after a GSS initialization
      failure.  Make it fail immediately, as the equivalent case for TLS
      encryption has long done.
     </p></li><li class="listitem"><p>
      Fix possible data corruption in <span class="application">ecpg</span>
      programs built with the <code class="option">-C ORACLE</code> option
      (Kyotaro Horiguchi)
     </p><p>
      When <code class="function">ecpg_get_data()</code> is called
      with <code class="varname">varcharsize</code> set to zero, it could write a
      terminating zero character into the last byte of the preceding
      field, truncating the data in that field.
     </p></li><li class="listitem"><p>
      Fix <span class="application">pg_dump</span> so that partitioned tables
      that are hash-partitioned on an enum-type column can be restored
      successfully (Tom Lane)
     </p><p>
      Since the hash codes for enum values depend on the OIDs assigned to
      the enum, they are typically different after a dump and restore,
      meaning that rows often need to go into a different partition than
      they were in originally.  Users can work around that by specifying
      the <code class="option">--load-via-partition-root</code> option; but since
      there is very little chance of success without that,
      teach <span class="application">pg_dump</span> to apply it automatically
      to such tables.
     </p><p>
      Also, fix <span class="application">pg_restore</span> to not try
      to <code class="command">TRUNCATE</code> target tables before restoring into
      them when <code class="option">--load-via-partition-root</code> mode is used.
      This avoids a hazard of deadlocks and lost data.
     </p></li><li class="listitem"><p>
      Correctly detect non-seekable files on Windows
      (Juan José Santamaría Flecha, Michael Paquier, Daniel Watzinger)
     </p><p>
      This bug led to misbehavior when <span class="application">pg_dump</span>
      writes to a pipe or <span class="application">pg_restore</span> reads from
      one.
     </p></li><li class="listitem"><p>
      In <span class="application">pgbench</span>'s <span class="quote"><span class="quote">prepared</span></span>
      mode, prepare all the commands in a pipeline before starting the
      pipeline (Álvaro Herrera)
     </p><p>
      This avoids a failure when a pgbench script tries to
      start a serializable transaction inside a pipeline.
     </p></li><li class="listitem"><p>
      In <code class="filename">contrib/amcheck</code>'s heap checking code, deal
      correctly with tuples having zero xmin or xmax (Robert Haas)
     </p></li><li class="listitem"><p>
      In <code class="filename">contrib/amcheck</code>, deal sanely with xids that
      appear to be before epoch zero (Andres Freund)
     </p><p>
      In cases of corruption we might see a wrapped-around 32-bit xid that
      appears to be before the first xid epoch.  Promoting such a value to
      64-bit form produced a value far in the future, resulting in wrong
      reports.  Return FirstNormalFullTransactionId in such cases so that
      things work reasonably sanely.
     </p></li><li class="listitem"><p>
      In <code class="filename">contrib/basebackup_to_shell</code>, properly detect
      failure to open a pipe (Robert Haas)
     </p></li><li class="listitem"><p>
      In <code class="filename">contrib/hstore_plpython</code>, avoid crashing if
      the Python value to be transformed isn't a mapping (Dmitry Dolgov,
      Tom Lane)
     </p><p>
      This should give an error, but Python 3 changed some APIs in a way
      that caused the check to misbehave, allowing a crash to ensue.
     </p></li><li class="listitem"><p>
      Require the <code class="literal">siglen</code> option of a GiST index on
      an <code class="type">ltree</code> column, if specified, to be a multiple of 4
      (Alexander Korotkov)
     </p><p>
      Other values result in misaligned accesses to index content, which
      is harmless on Intel-compatible hardware but can cause a crash on
      some other architectures.
     </p></li><li class="listitem"><p>
      In <code class="filename">contrib/pageinspect</code>, add defenses against
      incorrect input for the <code class="function">gist_page_items()</code> function
      (Dmitry Koval)
     </p></li><li class="listitem"><p>
      Fix misbehavior in <code class="filename">contrib/pg_trgm</code> with an
      unsatisfiable regular expression (Tom Lane)
     </p><p>
      A regex such as <code class="literal">$foo</code> is legal but unsatisfiable;
      the regex compiler recognizes that and produces an empty NFA graph.
      Attempting to optimize such a graph into a pg_trgm GIN or GiST index
      qualification resulted in accessing off the end of a work array,
      possibly leading to crashes.
     </p></li><li class="listitem"><p>
      Fix handling of escape sequences
      in <code class="filename">contrib/postgres_fdw</code>'s
      <code class="varname">application_name</code> parameter (Kyotaro Horiguchi,
      Michael Paquier)
     </p><p>
      The code to expand these could fail if executed in a background
      process, as for example during auto-analyze of a foreign table.
     </p></li><li class="listitem"><p>
      In <code class="filename">contrib/pg_walinspect</code>, limit memory usage
      of <code class="function">pg_get_wal_records_info()</code> (Bharath Rupireddy)
     </p></li><li class="listitem"><p>
      Use the <code class="option">--strip-unneeded</code> option when stripping
      static libraries with
      GNU-compatible <span class="application">strip</span> (Tom Lane)
     </p><p>
      Previously, <code class="literal">make install-strip</code> used
      the <code class="option">-x</code> option in this case.  This change avoids
      misbehavior of <span class="application">llvm-strip</span>, and gives
      slightly smaller output as well.
     </p></li><li class="listitem"><p>
      Stop recommending auto-download of DTD files for building the
      documentation, and indeed disable it (Aleksander Alekseev, Peter
      Eisentraut, Tom Lane)
     </p><p>
      It appears no longer possible to build the SGML documentation
      without a local installation of the DocBook DTD files.
      Formerly <span class="application">xsltproc</span> could download those
      files on-the-fly from sourceforge.net; but sourceforge.net now
      permits only HTTPS access, and no common version
      of <span class="application">xsltproc</span> supports that.  Hence, remove
      the bits of our documentation suggesting that that's possible or
      useful, and instead
      add <span class="application">xsltproc</span>'s <code class="option">--nonet</code>
      option to the build recipes.
     </p></li><li class="listitem"><p>
      When running TAP tests in PGXS builds, use a saner location for the
      temporary <code class="filename">portlock</code> directory (Peter Eisentraut)
     </p><p>
      Place it under <code class="filename">tmp_check</code> in the build
      directory.  With the previous coding, a PGXS build would try to place
      it in the installation directory, which is not necessarily writable.
     </p></li><li class="listitem"><p>
      Update time zone data files to <span class="application">tzdata</span>
      release 2023c for DST law changes in Egypt, Greenland, Morocco, and
      Palestine.
     </p><p>
      When observing Moscow time, Europe/Kirov and Europe/Volgograd now
      use the abbreviations MSK/MSD instead of numeric abbreviations,
      for consistency with other timezones observing Moscow time.
      Also, America/Yellowknife is no longer distinct from America/Edmonton;
      this affects some pre-1948 timestamps in that area.
     </p></li></ul></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="release-15-4.html" title="E.3. Release 15.4">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="release.html" title="Appendix E. Release Notes">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="release-15-2.html" title="E.5. Release 15.2">Next</a></td></tr><tr><td width="40%" align="left" valign="top">E.3. Release 15.4 </td><td width="20%" align="center"><a accesskey="h" href="index.html" title="PostgreSQL 15.6 Documentation">Home</a></td><td width="40%" align="right" valign="top"> E.5. Release 15.2</td></tr></table></div></body></html>