Correctifs appliqués

Tom Lane pushed:

  • Doc: fix minor release-note typo. Liudmila Mantrova Discussion:
  • Fix type checking for support functions of parallel VARIADIC aggregates. The impact of VARIADIC on the combine/serialize/deserialize support functions of an aggregate wasn't thought through carefully. There is actually no impact, because variadicity isn't passed through to these functions (and it doesn't seem like it would need to be). However, lookup_agg_function was mistakenly told to check things as though it were passed through. The net result was that it was impossible to declare an aggregate that had both VARIADIC input and parallelism support functions. In passing, fix a runtime check in nodeAgg.c for the combine function's strictness to make its error message agree with the creation-time check. The previous message was actually backwards, and it doesn't seem like there's a good reason to have two versions of this message text anyway. Back-patch to 9.6 where parallel aggregation was introduced. Alexey Bashtanov; message fix by me Discussion:
  • Fix misprocessing of equivalence classes involving record_eq(). canonicalize_ec_expression() is supposed to agree with coerce_type() as to whether a RelabelType should be inserted to make a subexpression be valid input for the operators of a given opclass. However, it did the wrong thing with named-composite-type inputs to record_eq(): it put in a RelabelType to RECORDOID, which the parser doesn't. In some cases this was harmless because all code paths involving a particular equivalence class did the same thing, but in other cases this would result in failing to recognize a composite-type expression as being a member of an equivalence class that it actually is a member of. The most obvious bad effect was to fail to recognize that an index on a composite column could provide the sort order needed for a mergejoin on that column, as reported by Teodor Sigaev. I think there might be other, subtler, cases that result in misoptimization. It also seems possible that an unwanted RelabelType would sometimes get into an emitted plan --- but because record_eq and friends don't examine the declared type of their input expressions, that would not create any visible problems. To fix, just treat RECORDOID as if it were a polymorphic type, which in some sense it is. We might want to consider formalizing that a bit more someday, but for the moment this seems to be the only place where an IsPolymorphicType() test ought to include RECORDOID as well. This has been broken for a long time, so back-patch to all supported branches. Discussion:
  • Detoast plpgsql variables if they might live across a transaction boundary. Up to now, it's been safe for plpgsql to store TOAST pointers in its variables because the ActiveSnapshot for whatever query called the plpgsql function will surely protect such TOAST values from being vacuumed away, even if the owning table rows are committed dead. With the introduction of procedures, that assumption is no longer good in "non atomic" executions of plpgsql code. We adopt the slightly brute-force solution of detoasting all TOAST pointers at the time they are stored into variables, if we're in a non-atomic context, just in case the owning row goes away. Some care is needed to avoid long-term memory leaks, since plpgsql tends to run with CurrentMemoryContext pointing to its call-lifespan context, but we shouldn't assume that no memory is leaked by heap_tuple_fetch_attr. In plpgsql proper, we can do the detoasting work in the "eval_mcontext". Most of the code thrashing here is due to the need to add this capability to expandedrecord.c as well as plpgsql proper. In expandedrecord.c, we can't assume that the caller's context is short-lived, so make use of the short-term sub-context that was already invented for checking domain constraints. In view of this repurposing, it seems good to rename that variable and associated code from "domain_check_cxt" to "short_term_cxt". Peter Eisentraut and Tom Lane Discussion:
  • Make numeric power() handle NaNs according to the modern POSIX spec. In commit 6bdf1303b, we ensured that power()/^ for float8 would honor the NaN behaviors specified by POSIX standards released in this century, ie NaN ^ 0 = 1 and 1 ^ NaN = 1. However, numeric_power() was not touched and continued to follow the once-common behavior that every case involving NaN input produces NaN. For consistency, let's switch the numeric behavior to the modern spec in the same release that ensures that behavior for float8. (Note that while 6bdf1303b was initially back-patched, we later undid that, concluding that any behavioral change should appear only in v11.) Discussion:
  • MSVC builds must use a separate stamp file for copying generated headers. Commit bad51a49a tried to use a shortcut with just one stamp file recording the actions of generating the pg_*_d.h headers and copying them to the src/include/catalog/ directory. That doesn't work in all scenarios though, so we must use two stamp files like the Makefiles do. John Naylor Discussion:
  • Small improvement for plpgsql regression test. Use DISCARD PLANS instead of a reconnect to force reconstruction of a cached plan; this corresponds more nearly to what people might actually do in practice.
  • Recognize that MSVC can support strtoll() and strtoull(). This is needed for full support of "long long" variables in ecpg, but the previous patch for bug #15080 (commits 51057feaa et al) missed it. In MSVC versions where the functions don't exist under those names, we can nonetheless use _strtoi64() and _strtoui64(). Like the previous patch, back-patch all the way. Dang Minh Huong Discussion:
  • Add some test coverage for ecpg's "long long" support. This will only actually exercise the "long long" code paths on platforms where "long" is 32 bits --- otherwise, the SQL bigint type maps to plain "long", and we will test that code path instead. But that's probably sufficient coverage, and anyway we weren't testing either code path before. Dang Minh Huong, tweaked a bit by me Discussion:
  • Hot-fix ecpg regression test for missing ecpg_config.h inclusion. I don't think this is really the best long-term answer, and in particular it doesn't fix the pre-existing hazard in sqltypes.h. But for the moment let's just try to make the buildfarm green again. Discussion:
  • Arrange to supply declarations for strtoll/strtoull if needed. Buildfarm member dromedary is still unhappy about the recently-added ecpg "long long" tests. The reason turns out to be that it includes "-ansi" in its CFLAGS, and in their infinite wisdom Apple have decided to hide the declarations of strtoll/strtoull in C89-compliant builds. (I find it pretty curious that they hide those function declarations when you can nonetheless declare a "long long" variable, but anyway that is their behavior, both on dromedary's obsolete macOS version and the newest and shiniest.) As a result, gcc assumes these functions return "int", leading naturally to wrong results. (Looking at dromedary's past build results, it's evident that this problem also breaks pg_strtouint64() on 32-bit platforms; but we evidently have no regression tests that exercise that function with values above 32 bits.) To fix, supply declarations for these functions when the platform provides the functions but not the declarations, using the same type of mechanism as we use for some other similar cases. Discussion:
  • Support platforms where strtoll/strtoull are spelled __strtoll/__strtoull. Ancient HPUX, for one, does this. We hadn't noticed due to the lack of regression tests that required a working strtoll. (I was slightly tempted to remove the other historical spelling, strto[u]q, since it seems we have no buildfarm members testing that case. But I refrained.) Discussion:
  • Assorted minor cleanups for bootstrap-data Perl scripts. FindDefinedSymbol was intended to take an array of possible include paths, but it never actually worked correctly for any but the first array element. Since there's no use-case for more than one path anyway, let's just simplify this code and its callers by redefining it as taking only one include path. Minor other code-beautification without functional effects, except that in one place we format the output as pgindent would do. John Naylor Discussion:
  • printf("%lf") is not portable, so omit the "l". The "l" (ell) width spec means something in the corresponding scanf usage, but not here. While modern POSIX says that applying "l" to "f" and other floating format specs is a no-op, SUSv2 says it's undefined. Buildfarm experience says that some old compilers emit warnings about it, and at least one old stdio implementation (mingw's "ANSI" option) actually produces wrong answers and/or crashes. Discussion: Discussion:

�lvaro Herrera pushed:

Magnus Hagander pushed:

Bruce Momjian pushed:

Robert Haas pushed:

Andrew Gierth pushed:

Peter Eisentraut pushed:

Andrew Dunstan pushed:

Stephen Frost pushed:

Correctifs en attente

Micha�l Paquier sent in a patch to ensure that temporary WAL segments files are cleaned up after an instance crash.

Micha�l Paquier sent in a patch to fix a bug that manifested as a PANIC during crash recovery of a recently promoted standby.

Ashutosh Bapat sent in another revision of a patch to improve the patition matching algorithm for partition-wise joins.

Simon Muller sent in a patch to enable COPY ... TO to emit a HEADER row in formats other than CSV.

Ashutosh Bapat sent in three more revisions of a patch to fix a bug which manifested as expression errors with "FOR UPDATE" and postgres_fdw with partition wise join enabled.

Kyotaro HORIGUCHI sent in another revision of a patch to allow a wait event set to be registered to a resource owner, add infrastructure for asynchronous execution, and use same in the PostgreSQL FDW.

Micha�l Paquier sent in another revision of a patch to extend lookup routines for FDW and foreign server with NULL handling, refactor the routines for subscription and publication lookups, and eliminate user-visible cache lookup errors for objaddr SQL functions.

David Rowley sent in a patch to ensure that total_pages is calculated after partition pruning and constraint exclusion.

Nikita Glukhov sent in a patch to disable backward scans on indices that do not support it.

Takeshi Ideriha sent in a patch to ensure that log_min_messages shows log level DEBUG2 correctly.

Aleksandr Parfenov sent in another revision of a patch to optimze usage of immutable functions as relations.

Konstantin Knizhnik sent in another revision of a patch to add a compression option to libpq.

Heikki Linnakangas sent in a patch to improve memory unit GUC range checks.

Artur Zakirov sent in another revision of a patch to implement shared Ispell dictionaries.

Alexander Kuzmenkov sent in a patch to remove unneeded self-joins.

Amit Langote sent in a patch to normalize the spelling of things around partitioning, in particular changing things that say "partition" to "partitioned" where that makes sense.

Daisuke Higuchi sent in a patch to fix an issue that manifested as cancellation of significant digits in ECPG.

Andrey Borodin sent in another revision of a patch to include GiST in VACUUM.

Paul and Richard Guo sent in a patch to fix a pg_upgrade test failure.

Kyotaro HORIGUCHI sent in a patch to reject an invalid standby.

Amit Langote sent in a patch to propagate child joinrels to parent root.

Paul Guo sent in two revisions of a patch to use access() instead of BasicOpenFile() + close() to check file existence in GetNewRelFileNode().

Peter Eisentraut sent in a patch to allow functions and procedures with the same name.

Kyotaro HORIGUCHI sent in a patch to fix pg_logical replication slot advance.

Sho Kato sent in a patch to add the operation of freeing output SQLDA to the ECPG documentation.

Michael Banck sent in a patch to remove the short (-k) option from pg_basebackup, leaving in place the longer version, --no-verify-checksums.

Andres Freund sent in a patch to fix some issues that arise in corner case failures of fsync().

John Naylor sent in two revisions of a patch to add a pg_language lookup and replace the /ad hoc/ format for conversion functions with a more uniform one.

John Naylor sent in a patch to generate bootstrap entries for array types.

Micha�l Paquier sent in a patch to fix some error handling for read() and errno.

Andrew Gierth sent in two revisions of a patch to fix some FETCH FIRST syntax issues.