PostgreSQL Weekly News - October 10, 2021

From: PWN via PostgreSQL Announce <announce-noreply(at)postgresql(dot)org>
To: PostgreSQL Announce <pgsql-announce(at)lists(dot)postgresql(dot)org>
Subject: PostgreSQL Weekly News - October 10, 2021
Date: 2021-10-11 22:25:11
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-announce

# PostgreSQL Weekly News - October 10, 2021

# PostgreSQL Product News

pgCluu 3.2, a Perl program to audit PostgreSQL performance,

PGroonga 2.3.2 a full text search platform for all languages,

# PostgreSQL Jobs for October


# PostgreSQL in the News

Planet PostgreSQL: [](

PostgreSQL Weekly News is brought to you this week by David Fetter

Submit news and announcements by Sunday at 3:00pm PST8PDT to david(at)fetter(dot)org(dot)

# Applied Patches

Michaël Paquier pushed:

- Fix snapshot builds during promotion of hot standby node with 2PC. Some
specific logic is done at the end of recovery when involving 2PC transactions:
1) Call RecoverPreparedTransactions(), to recover the state of 2PC
transactions into memory (re-acquire locks, etc.). 2)
ShutdownRecoveryTransactionEnvironment(), to move back to normal operations,
mainly cleaning up recovery locks and KnownAssignedXids (including any 2PC
transaction tracked previously). 3) Switch XLogCtl->SharedRecoveryState to
RECOVERY_STATE_DONE, which is the tipping point for any process calling
RecoveryInProgress() to check if the cluster is still in recovery or not. Any
snapshot taken between steps 2) and 3) would be empty, causing any transaction
relying on a snapshot at this point to potentially corrupt data as there could
still be some 2PC transactions to track, with RecentXmin moving backwards on
successive calls to GetSnapshotData() in the same transaction. As
SharedRecoveryState is the point to take into account to know if it is safe to
discard KnownAssignedXids, this commit moves step 2) after step 3), so as we
can never finish with empty snapshots. This exists since the introduction of
hot standby, so backpatch all the way down. The window with incorrect
snapshots is extremely small, but I have seen it when running, as did buildfarm member fairywren. Thomas Munro
also found it independently. Special thanks to Andres Freund for taking the
time to analyze this issue. Reported-by: Thomas Munro, Michael Paquier
Analyzed-by: Andres Freund Discussion:
Backpatch-through: 9.6

- Fix warning in TAP test of pg_verifybackup. Oversight in a3fcbcd.
Reported-by: Thomas Munro Discussion:
Backpatch-through: 13

- Refactor per-destination file rotation in logging collector. stderr and csvlog
have been using duplicated code when it came to the rotation of their file by
size, age or if forced by a user request (pg_ctl logrotate or the SQL function
pg_rotate_logfile). The main difference between both is that stderr requires
its file to always be opened, so as it is possible to have a redirection route
if the logging collector is not ready yet to do its work if alternate
destinations are enabled. Also, if csvlog gets disabled, we need to close
properly its meta-data stored in the logging collector (last file name for
current_logfiles and fd currently open for business). Except for those
points, the code is the same in terms of error handling and if a file should
be created or just continued. This change makes the code simpler overall, and
it will help in the introduction of more file-based log destinations. This
refactoring is similar to the work done in 5b0b699. Most of the duplication
originates from fd801f4. Some of the TAP tests of pg_ctl check the case of a
forced log rotation, but this is somewhat limited as there is no coverage for
log_rotation_age or log_rotation_size (these may not be worth the extra
resources to run either), and no coverage for reload of log_destination with
different combinations of stderr and csvlog. I have tested all those cases
separately for this refactoring. Author: Michael Paquier Discussion:

- Fix compilation warning in syslogger.c. Oversight in 5c6e33f. Author: Nathan
Bossart Discussion:

- Refactor fallback to stderr for csvlog to handle better WIN32 service case.
send_message_to_server_log() would force a redirection of a log entry to
stderr in some cases for csvlog, like the syslogger not being available yet.
If this happens, csvlog would fall back to stderr to log some information
rather than nothing. The code was organized so as stderr is done before
csvlog, with csvlog checking that stderr did not happen yet with a reversed
condition. With this code organization, it could be possible to lose some
messages if running Postgres as a service on WIN32, as there is no usable
stderr, and the handling of the StringInfoData holding the message for stderr
was rather confusing because of that. This commit moves the csvlog handling
to be before stderr, as as we are able to track down if it is necessary to log
something to stderr. The reduces the handling of stderr to be in a single
code path, adding a fallback to event logs for a WIN32 service. This also
simplifies the way we handle the StringInfoData for stderr, making easier the
integration of new file-based log destinations. I got to play with services
and event logs on Windows while checking this change. Reviewed-by: Chris
Bandy Discussion:

Daniel Gustafsson pushed:

- Replace occurrences of InvalidXid with InvalidTransactionId. While Xid is a
known shortening of TransactionId, InvalidXid is not defined in the code. Fix
comments which mistakenly were using the shorter version. Author: Bharath
Rupireddy <bharath(dot)rupireddyforpostgres(at)gmail(dot)com> Discussion:

- Provide error hint if TAP tests are not enabled. The error message for trying
to run the TAP tests in a tree not configured with --enable-tap-tests is quite
terse, and could be made more helpful to new developers onboarding to
postgres. This adds a small hint on how to get the tests running in such
cases. Author: Kevin Burke <kevin(at)burke(dot)dev> Discussion:

- Provide error hint on exit() check when building libpq. Commit dc227eb82
introduced a restriction on libpq that no functions which invoke exit() are
allowed to be called. This was further refined and fixed in e45b0dfa1f and
2f7bae2f92 and 792259591. While this is well documented in the Makefile, the
error message emitted when the check failed was terse, without hints for new
developers without prior context. This adds an error hint to assist new
developers onboarding to postgres. Author: Rachel Heaton <rheaton(at)vmware(dot)com>
Co-authored-by: Jacob Champion <pchampion(at)vmware(dot)com> Discussion:

- Fix duplicate words in comments. Remove accidentally duplicated words in code
comments. Author: Dagfinn Ilmari Mannsåker <ilmari(at)ilmari(dot)org> Discussion:

- Fix check for trapping exit() calls in libpq. Commit e9bc0441f added an
errorhint on the exit() check for libpq, but accidentally changed the nm
commandline to use -a instead of -A. These options are similar enough to hide
it in testing, but -a can also show debugger symbols which isn't what we want.
Fix by reverting the check back to using -A again. Reported-by: Anton
Voloshin <a(dot)voloshin(at)postgrespro(dot)ru> Discussion:

Peter Eisentraut pushed:

- Update Unicode map text files. A couple of newer ones are available. There
are no functional differences, but let's get them in anyway, so that there is
no surprise diff next time someone wants to do some actual work in this area.

- Make Unicode makefile parallel-safe. Fix the rules so that each rule is
parallel safe, using the same trickery that we use elsewhere in the tree for
rules that produce more than one output file. Refactor the whole makefile so
that there is less repetition. Discussion:

- Fix loop variable signedness.

- Improve order in file. Move support functions for new PublicationTable node to
more sensible locations in the files.

Tom Lane pushed:

- Doc: fix minor issues in GiST support function documentation. gist.sgml and
xindex.sgml hadn't been fully updated for the addition of a sortsupport
support function (commit 16fa9b2b3). xindex.sgml also missed that the compress
and decompress support functions are optional, an apparently far older
oversight. In passing, fix gratuitous inconsistencies in wording and
capitalization. Noted by E. Rogov. Back-patch to v14; the residual issues
before that aren't significant enough to bother with. Discussion:

- Update our mapping of Windows time zone names some more. Per discussion, let's
just follow CLDR's default zone mappings faithfully. There are two changes
here that are clear improvements: * Mapping "Greenwich Standard Time" to
Atlantic/Reykjavik is actually a better fit than using London, because Iceland
hasn't observed DST since 1968, so this is more nearly what people might
expect. * Since the "Samoa" zone is specified to be UTC+13:00, we must map it
to Pacific/Apia not Pacific/Samoa; the latter refers to American Samoa which
is now on the other side of the date line. The rest of these changes look
like they're choosing the most populous IANA zone as representative. Whatever
the details, we're just going to say "if you don't like this mapping, complain
to CLDR". Discussion:

- Doc: improve description of UNION/INTERSECT/EXCEPT syntax. queries.sgml failed
to mention the rather important point that INTERSECT binds more tightly than
UNION or EXCEPT. I thought it could also use more discussion of the role of
parentheses in these constructs. Per gripe from Christopher
Painter-Wakefield. Discussion:

- Doc: improve timezone/README's recipe for tracking Windows zones. We should
now cite CLDR as primary reference for the zone name mapping. Discussion:

- Fix null-pointer crash in postgres_fdw's conversion_error_callback. Commit
c7b7311f6 adjusted conversion_error_callback to always use information from
the query's rangetable, to avoid doing catalog lookups in an already-failed
transaction. However, as a result of the utterly inadequate documentation for
make_tuple_from_result_row, I failed to realize that fsstate could be NULL in
some contexts. That led to a crash if we got a conversion error in such a
context. Fix by falling back to the previous coding when fsstate is NULL.
Improve the commentary, too. Per report from Andrey Borodin. Back-patch to
9.6, like the previous patch. Discussion:

- plperl: update ppport.h to Perl 5.34.0. Also apply the changes suggested by
running perl ppport.h --compat-version=5.8.0 And remove some
no-longer-required NEED_foo declarations. Dagfinn Ilmari Mannsåker

- Adjust configure to insist on Perl version >= 5.8.3. Previously it only
checked for version >= 5.8.0, although the documentation has said that the
minimum version is 5.8.3 since commit dea6ba939. Per the discussion leading
up to that commit, I (tgl) left it that way intentionally because you could,
at the time, do some bare-bones stuff with 5.8.0. But we aren't actually
testing against anything older than 5.8.3, so who knows if that's still true.
It's pretty unlikely that anyone would care anyway, so let's just make
configure's version check match the docs. Dagfinn Ilmari Mannsåker

- Update test/perl/README to insist on Perl version >= 5.8.3, too. Oversight in
previous commit, noted by Daniel Gustafsson. Discussion:

- Doc: update our claims about the minimum recommended AIX version. We currently
have buildfarm members testing back to AIX 7.1, but not before, and older AIX
versions are long out of support from IBM. So say that 7.1 is the oldest
supported version. Discussion:

- Doc: improve documentation for ^@ starts-with operator. This operator wasn't
formally documented anywhere. To give it a natural home, relabel the
functions-string-other table as "Other String Functions and Operators", which
is more parallel to the functions-string-sql table anyway. While here, add
cross-references to the pattern match and text search sections. It seems
moderately likely that people would come to this section looking for those
(but I don't want to actually list them in these tables). Discussion:

Andres Freund pushed:

- windows: Define WIN32_LEAN_AND_MEAN to make compilation faster. windows.h
includes a lot of other headers, slowing down compilation significantly.
WIN32_LEAN_AND_MEAN reduces that a bit. It'd be better to remove the include
of windows.h (as well as indirect inclusions of it) from such a central place,
but until then... Discussion:

- Fix TestLib::slurp_file() with offset on windows. 3c5b0685b921 used
setFilePointer() to set the position of the filehandle, but passed the wrong
filehandle, always leaving the position at 0. Instead of just fixing that,
remove use of setFilePointer(), we have a perl fd at this point, so we can
just use perl's seek(). Additionally, the perl filehandle wasn't closed, just
the windows filehandle. Reviewed-By: Andrew Dunstan <andrew(at)dunslane(dot)net>
Author: Andres Freund <andres(at)anarazel(dot)de> Discussion:
Backpatch: 9.6-, like 3c5b0685b921

Bruce Momjian pushed:

- doc: remove URL for ICU explorer/locexp. The old URL was HTTP 404 and the git
link didn't build. Also update two other ICU links. If we ever get a good
link we will add it back. Reported-by: Anton Voloshin Author: Laurenz Albe
Backpatch-through: 10

Fujii Masao pushed:

- psql: Improve tab-completion for LOCK TABLE. This commit makes psql support
the tab-completion for ONLY and NOWAIT keywords of LOCK TABLE command.
Author: Koyu Tanigawa Reviewed-by: Shinya Kato, Fujii Masao Discussion:

- doc: Document pg_encoding_to_char() and pg_char_to_encoding(). Previously both
functions were not described anywhere in the docs. But since they have been
around since 7.0 and mentioned in the description for system catalog like
pg_database, it's reasonable to add short descriptions for them. Author: Ian
Lawrence Barwick Reviewed-by: Laurenz Albe, Fujii Masao Discussion:

- Make recovery report error message when invalid page header is found. Commit
0668719801 changed XLogPageRead() so that it validated the page header, if
invalid page header was found reset the error message and retried reading the
page, to fix the scenario where streaming standby got stuck at a continuation
record. This change hid the error message about invalid page header, which
would make it harder for users to investigate what the actual issue was found
in WAL. To fix the issue, this commit makes XLogPageRead() report the error
message when invalid page header is found. When not in standby mode, an
invalid page header should cause recovery to end, not retry reading the page,
so XLogPageRead() doesn't need to validate the page header for the retry.
Instead, ReadPageInternal() should be responsible for the validation in that
case. Therefore this commit changes XLogPageRead() so that if not in standby
mode it doesn't validate the page header for the retry. Reported-by: Yugo
Nagata Author: Yugo Nagata, Kyotaro Horiguchi Reviewed-by: Ranier Vilela,
Fujii Masao Discussion:

Amit Kapila pushed:

- Remove obsolete comment in snapbuild.c. Commits 955a684e04 and a975ff4980
removed the usage of running xacts information from serialized snapshots but
forgot to remove the corresponding comment. Author: Masahiko Sawada

Robert Haas pushed:

- Flexible options for BASE_BACKUP. Previously, BASE_BACKUP used an entirely
hard-coded syntax, but that's hard to extend. Instead, adopt the same kind of
syntax we've used for SQL commands such as VACUUM, ANALYZE, COPY, and EXPLAIN,
where it's not necessary for all of the option names to be parser keywords.
In the new syntax, most of the options now take an optional Boolean argument.
To match our practice in other in places, the options which the old syntax
called NOWAIT and NOVERIFY_CHECKSUMS options are in the new syntax called WAIT
and VERIFY_CHECKUMS, and the default value is false. In the new syntax, the
FAST option has been replaced by a CHECKSUM option whose value may be 'fast'
or 'spread'. This commit does not remove support for the old syntax. It just
adds the new one as an additional option, and makes pg_basebackup prefer the
new syntax when the server is new enough to support it. Patch by me, reviewed
and tested by Fabien Coelho, Sergei Kornilov, Fujii Masao, and Tushar Ahuja.

CREATE_REPLICATION_SLOT has historically used a hard-coded syntax. To improve
future extensibility, adopt a flexible options syntax here, too. In the new
syntax, instead of three mutually exclusive options EXPORT_SNAPSHOT,
USE_SNAPSHOT, and NOEXPORT_SNAPSHOT, there is now a single SNAPSHOT option
with three possible values: 'export', 'use', and 'nothing'. This commit does
not remove support for the old syntax. It just adds the new one as an
additional option, makes pg_receivewal, pg_recvlogical, and walreceiver
processes use it. Patch by me, reviewed by Fabien Coelho, Sergei Kornilov,
and Fujii Masao. Discussion:

Dean Rasheed pushed:

- Fix corner-case loss of precision in numeric_power(). This fixes a loss of
precision that occurs when the first input is very close to 1, so that its
logarithm is very small. Formerly, during the initial low-precision
calculation to estimate the result weight, the logarithm was computed to a
local rscale that was capped to NUMERIC_MAX_DISPLAY_SCALE (1000). However, the
base may be as close as 1e-16383 to 1, hence its logarithm may be as small as
1e-16383, and so the local rscale needs to be allowed to exceed 16383,
otherwise all precision is lost, leading to a poor choice of rscale for the
full-precision calculation. Fix this by removing the cap on the local rscale
during the initial low-precision calculation, as we already do in the
full-precision calculation. This doesn't change the fact that the initial
calculation is a low-precision approximation, computing the logarithm to
around 8 significant digits, which is very fast, especially when the base is
very close to 1. Patch by me, reviewed by Alvaro Herrera. Discussion:

Etsuro Fujita pushed:

- Add missing word to comment in joinrels.c. Author: Amit Langote
Backpatch-through: 13 Discussion:

- postgres_fdw: Fix comments in connection.c. Commit 27e1f1456 missed updating
some comments. Reviewed-by: Bharath Rupireddy Backpatch-through: 14

Browse pgsql-announce by date

  From Date Subject
Next Message pgAdmin Development Team via PostgreSQL Announce 2021-10-11 22:25:29 pgAdmin 4 v6.0 Released
Previous Message PostgreSQL Code of Conduct Committee via PostgreSQL Announce 2021-10-09 11:06:16 New Members of the Community Code of Conduct Committee