== PostgreSQL Weekly News - January 26, 2020 ==

From: David Fetter <david(at)fetter(dot)org>
To: PostgreSQL Announce <pgsql-announce(at)postgresql(dot)org>
Subject: == PostgreSQL Weekly News - January 26, 2020 ==
Date: 2020-01-26 15:45:01
Message-ID: 20200126154501.GA16307@fetter.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-announce

== PostgreSQL Weekly News - January 26, 2020 ==

== PostgreSQL Product News ==

pg_probackup 2.2.7, a utility to manage backup and recovery of PostgreSQL
database clusters, released.
https://github.com/postgrespro/pg_probackup

pitrery 3.0, a set of Bash scripts to manage PITR backups for PostgreSQL, released.
http://dalibo.github.io/pitrery/

== PostgreSQL Jobs for January ==

http://archives.postgresql.org/pgsql-jobs/2020-01/

== PostgreSQL Local ==

pgDay Israel 2020 will take place on March 19, 2020 in Tel Aviv.
http://pgday.org.il/

pgDay Paris 2020 will be held in Paris, France on March 26, 2020 at Espace
Saint-Martin.
https://2020.pgday.paris/

Nordic PGDay 2020 will be held in Helsinki, Finland at the Hilton Helsinki
Strand Hotel on March 24, 2020.

PGConf India 2020 will be on February 26-28, 2020 in Bengaluru, Karnataka.
http://pgconf.in/

PostgreSQL(at)SCaLE is a two day, two track event which takes place on
March 5-6, 2020, at Pasadena Convention Center, as part of SCaLE 18X.
https://www.socallinuxexpo.org/scale/18x/postgresscale

The German-speaking PostgreSQL Conference 2020 will take place on May 15, 2019
in Stuttgart.

PGCon 2019 will take place in Ottawa on May 26-29, 2020.
https://www.pgcon.org/2020/

PGDay.IT 2020 will take place June 11-12 in Bergamo, Italy. The CfP
is open until February 8th, 2020 at midnight, as is the Call for Workshops.
https://2020.pgday.it/en/

== PostgreSQL in the News ==

Planet PostgreSQL: http://planet.postgresql.org/

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 ==

Tom Lane pushed:

- Silence minor compiler warnings. Ensure that
ClassifyUtilityCommandAsReadOnly() has defined behavior even if
TransactionStmt.kind has a value that's not one of the declared values for its
enum. Suppress warnings from compilers that don't know that elog(ERROR)
doesn't return, in ClassifyUtilityCommandAsReadOnly() and jsonb_set_lax().
Per Coverity and buildfarm.
https://git.postgresql.org/pg/commitdiff/9c679a08f0cdedcf7f084daea3cba6ae9c3cbced

- Fix out-of-memory handling in ecpglib. ecpg_build_params() would crash on a
null pointer dereference if realloc() failed, due to updating the persistent
"stmt" struct too aggressively. (Even without the crash, this would've leaked
the old storage that we were trying to realloc.) Per Coverity. This seems to
have been broken in commit 0cc050794, so back-patch into v12.
https://git.postgresql.org/pg/commitdiff/44f1fc8df5dadbc5e80661660903aab4076d868f

- Fix pg_dump's sigTermHandler() to use _exit() not exit(). sigTermHandler()
tried to be careful to invoke only operations that are safe to do in a signal
handler. But for some reason we forgot that exit(3) is not among those,
because it calls atexit handlers that might do various random things.
(pg_dump itself installs no atexit handlers, but e.g. OpenSSL does.) That led
to crashes or lockups when attempting to terminate a parallel dump or restore
via a signal. Fix by calling _exit() instead. Per bug #16199 from Raúl
Marín. Back-patch to all supported branches. Discussion:
https://postgr.es/m/16199-cb2f121146a96f9b@postgresql.org
https://git.postgresql.org/pg/commitdiff/cd23a2019c4b8da47905e91c8a841cadac978a32

- Further tweaking of jsonb_set_lax(). Some buildfarm members were still warning
about this, because in 9c679a08f I'd missed decorating one of the ereport()
code paths with a dummy return. Also, adjust the error messages to be more in
line with project style guide.
https://git.postgresql.org/pg/commitdiff/31f403e95fdf88338d3fc9c6af80fcf6d8241044

- Clarify behavior of adding and altering a column in same ALTER command. The
behavior of something like ALTER TABLE transactions ADD COLUMN status
varchar(30) DEFAULT 'old', ALTER COLUMN status SET default 'current'; is to
fill existing table rows with 'old', not 'current'. That's intentional and
desirable for a couple of reasons: * It makes the behavior the same whether
you merge the sub-commands into one ALTER command or give them separately; *
If we applied the new default while filling the table, there would be no way
to get the existing behavior in one SQL command. The same reasoning applies
in cases that add a column and then manipulate its GENERATED/IDENTITY status
in a second sub-command, since the generation expression is really just a kind
of default. However, that wasn't very obvious (at least not to me; earlier in
the referenced discussion thread I'd thought it was a bug to be fixed). And
it certainly wasn't documented. Hence, add documentation, code comments, and
a test case to clarify that this behavior is all intentional. In passing,
adjust ATExecAddColumn's defaults-related relkind check so that it matches up
exactly with ATRewriteTables, instead of being effectively (though not
literally) the negated inverse condition. The reasoning can be explained a lot
more concisely that way, too (not to mention that the comment now matches the
code, which it did not before). Discussion:
https://postgr.es/m/10365.1558909428@sss.pgh.pa.us
https://git.postgresql.org/pg/commitdiff/9b9c5f279e8261ab90dc64559911d2578288b7e9

- Improve psql's tab completion for filenames. The Readline library contains a
fair amount of knowledge about how to tab-complete filenames, but it turns out
that that doesn't work too well unless we follow its expectation that we use
its filename quoting hooks to quote and de-quote filenames. We were trying to
do such quote handling within complete_from_files(), and that's still what we
have to do if we're using libedit, which lacks those hooks. But for Readline,
it works a lot better if we tell Readline that single-quote is a quoting
character and then provide hooks that know the details of the quoting rules
for SQL and psql meta-commands. Hence, resurrect the quoting hook functions
that existed in the original version of tab-complete.c (and were disabled by
commit f6689a328 because they "didn't work so well yet"), and whack on them
until they do seem to work well. Notably, this fixes bug #16059 from Steven
Winfield, who pointed out that the previous coding would strip quote marks
from filenames in SQL COPY commands, even though they're syntactically
necessary there. Now, we not only don't do that, but we'll add a quote mark
when you tab-complete, even if you didn't type one. Getting this to work
across a range of libedit versions (and, to a lesser extent, libreadline
versions) was depressingly difficult. It will be interesting to see whether
the new regression test cases pass everywhere in the buildfarm. Some future
patch might try to handle quoted SQL identifiers with similar explicit
quoting/dequoting logic, but that's for another day. Patch by me, reviewed by
Peter Eisentraut. Discussion:
https://postgr.es/m/16059-8836946734c02b84@postgresql.org
https://git.postgresql.org/pg/commitdiff/cd69ec66c88633c09bc9a984a7f0930e09c7c96e

- Clean up formatting.c's logic for matching constant strings. seq_search(),
which is used to match input substrings to constants such as month and day
names, had a lot of bizarre and unnecessary behaviors. It was mostly possible
to avert our eyes from that before, but we don't want to duplicate those
behaviors in the upcoming patch to allow recognition of non-English month and
day names. So it's time to clean this up. In particular: * seq_search
scribbled on the input string, which is a pretty dangerous thing to do,
especially in the badly underdocumented way it was done here. Fortunately the
input string is a temporary copy, but that was being made three subroutine
levels away, making it something easy to break accidentally. The behavior is
externally visible nonetheless, in the form of odd case-folding in error
reports about unrecognized month/day names. The scribbling is evidently being
done to save a few calls to pg_tolower, but that's such a cheap function (at
least for ASCII data) that it's pretty pointless to worry about. In HEAD I
switched it to be pg_ascii_tolower to ensure it is cheap in all cases; but
there are corner cases in Turkish where this'd change behavior, so leave it as
pg_tolower in the back branches. * seq_search insisted on knowing the case
form (all-upper, all-lower, or initcap) of the constant strings, so that it
didn't have to case-fold them to perform case-insensitive comparisons. This
likewise seems like excessive micro-optimization, given that pg_tolower is
certainly very cheap for ASCII data. It seems unsafe to assume that we know
the case form that will come out of pg_locale.c for localized month/day names,
so it's better just to define the comparison rule as "downcase all strings
before comparing". (The choice between downcasing and upcasing is arbitrary
so far as English is concerned, but it might not be in other locales, so
follow citext's lead here.) * seq_search also had a parameter that'd cause it
to report a match after a maximum number of characters, even if the constant
string were longer than that. This was not actually used because no caller
passed a value small enough to cut off a comparison. Replicating that
behavior for localized month/day names seems expensive as well as useless, so
let's get rid of that too. * from_char_seq_search used the maximum-length
parameter to truncate the input string in error reports about not finding a
matching name. This leads to rather confusing reports in many cases. Worse,
it is outright dangerous if the input string isn't all-ASCII, because we risk
truncating the string in the middle of a multibyte character. That'd lead
either to delivering an illegible error message to the client, or to
encoding-conversion failures that obscure the actual data problem. Get rid of
that in favor of truncating at whitespace if any (a suggestion due to Alvaro
Herrera). In addition to fixing these things, I const-ified the input string
pointers of DCH_from_char and its subroutines, to make sure there aren't any
other scribbling-on-input problems. The risk of generating a badly-encoded
error message seems like enough of a bug to justify back-patching, so patch
all supported branches. Discussion:
https://postgr.es/m/29432.1579731087@sss.pgh.pa.us
https://git.postgresql.org/pg/commitdiff/4c70098ffa8cf19e79e7b124ccac05dd338c937b

- Fix an oversight in commit 4c70098ff. I had supposed that the
from_char_seq_search() call sites were all passing the constant arrays you'd
expect them to pass ... but on looking closer, the one for DY format was
passing the days[] array not days_short[]. This accidentally worked because
the day abbreviations in English are all the same as the first three letters
of the full day names. However, once we took out the "maximum comparison
length" logic, it stopped working. As penance for that oversight, add
regression test cases covering this, as well as every other switch case in
DCH_from_char() that was not reached according to the code coverage report.
Also, fold the DCH_RM and DCH_rm cases into one --- now that seq_search is
case independent, there's no need to pass different comparison arrays for
those cases. Back-patch, as the previous commit was.
https://git.postgresql.org/pg/commitdiff/9a3a75cb81d3b060b8e76001d04c78ab4ce0dcef

- Add configure probe for rl_completion_suppress_quote. I had supposed that all
versions of Readline that have filename quoting hooks also have the
rl_completion_suppress_quote variable. But it seems OpenBSD managed to find a
version someplace that does not, so we'll have to expend a separate configure
probe for that. (Light testing suggests that this version also lacks the bugs
that make it necessary to frob that variable. Hooray!) Per buildfarm.
https://git.postgresql.org/pg/commitdiff/c32704441d47cc1cbb36367a429814511edb6ffd

- Clean up EXPLAIN's handling of per-worker details. Previously, it was possible
for EXPLAIN ANALYZE of a parallel query to produce several different "Workers"
fields for a single plan node, because different portions of explain.c
independently generated per-worker data and wrapped that output in separate
fields. This is pretty bogus, especially for the structured output formats:
even if it's not technically illegal, most programs would have a hard time
dealing with such data. To improve matters, add infrastructure that allows
redirecting per-worker values into a side data structure, and then collect
that data into a single "Workers" field after we've finished running all the
relevant code for a given plan node. There are a few visible side-effects: *
In text format, instead of something like Sort Method: external merge
Disk: 4920kB Worker 0: Sort Method: external merge Disk: 5880kB Worker
1: Sort Method: external merge Disk: 5920kB Buffers: shared hit=682
read=10188, temp read=1415 written=2101 Worker 0: actual
time=130.058..130.324 rows=1324 loops=1 Buffers: shared hit=337 read=3489,
temp read=505 written=739 Worker 1: actual time=130.273..130.512 rows=1297
loops=1 Buffers: shared hit=345 read=3507, temp read=505 written=744 you
get Sort Method: external merge Disk: 4920kB Buffers: shared hit=682
read=10188, temp read=1415 written=2101 Worker 0: actual
time=130.058..130.324 rows=1324 loops=1 Sort Method: external merge Disk:
5880kB Buffers: shared hit=337 read=3489, temp read=505 written=739
Worker 1: actual time=130.273..130.512 rows=1297 loops=1 Sort Method:
external merge Disk: 5920kB Buffers: shared hit=345 read=3507, temp
read=505 written=744 * When JIT is enabled, any relevant per-worker JIT stats
are attached to the child node of the Gather or Gather Merge node, which is
where the other per-worker output has always been. Previously, that info was
attached directly to a Gather node, or missed entirely for Gather Merge. * A
query's summary JIT data no longer includes a bogus "Worker Number: -1" field.
A notable code-level change is that indenting for lines of text-format output
should now be handled by calling "ExplainIndentText(es)", instead of
hard-wiring how much space to emit. This seems a good deal cleaner anyway.
This patch also adds a new "explain.sql" regression test script that's
dedicated to testing EXPLAIN. There is more that can be done in that line,
certainly, but for now it just adds some coverage of the XML and YAML output
formats, which had been completely untested. Although this is surely a bug
fix, it's not clear that people would be happy with rearranging EXPLAIN output
in a minor release, so apply to HEAD only. Maciek Sakrejda and Tom Lane,
based on an idea of Andres Freund's; reviewed by Georgios Kokolatos
Discussion:
https://postgr.es/m/CAOtHd0AvAA8CLB9Xz0wnxu1U=zJCKrr1r4QwwXi_kcQsHDVU=Q@mail.gmail.com
https://git.postgresql.org/pg/commitdiff/10013684970453a0ddc86050bba813c611114321

Amit Kapila pushed:

- Allow vacuum command to process indexes in parallel. This feature allows the
vacuum to leverage multiple CPUs in order to process indexes. This enables us
to perform index vacuuming and index cleanup with background workers. This
adds a PARALLEL option to VACUUM command where the user can specify the number
of workers that can be used to perform the command which is limited by the
number of indexes on a table. Specifying zero as a number of workers will
disable parallelism. This option can't be used with the FULL option. Each
index is processed by at most one vacuum process. Therefore parallel vacuum
can be used when the table has at least two indexes. The parallel degree is
either specified by the user or determined based on the number of indexes that
the table has, and further limited by max_parallel_maintenance_workers. The
index can participate in parallel vacuum iff it's size is greater than
min_parallel_index_scan_size. Author: Masahiko Sawada and Amit Kapila
Reviewed-by: Dilip Kumar, Amit Kapila, Robert Haas, Tomas Vondra, Mahendra
Singh and Sergei Kornilov Tested-by: Mahendra Singh and Prabhat Sahu
Discussion:
https://postgr.es/m/CAD21AoDTPMgzSkV4E3SFo1CH_x50bf5PqZFQf4jmqjk-C03BWg@mail.gmail.com
https://postgr.es/m/CAA4eK1J-VoR9gzS5E75pcD-OH0mEyCdp8RihcwKrcuw7J-Q0+w@mail.gmail.com
https://git.postgresql.org/pg/commitdiff/40d964ec997f64227bc0ff5e058dc4a5770a70a9

- Fix the computation of max dead tuples during the vacuum. In commit
40d964ec99, we changed the way memory is allocated for dead tuples but forgot
to update the place where we compute the maximum number of dead tuples. This
could lead to invalid memory requests. Reported-by: Andres Freund
Diagnosed-by: Andres Freund Author: Masahiko Sawada Reviewed-by: Amit Kapila
and Dilip Kumar Discussion:
https://postgr.es/m/20200121060020.e3cr7s7fj5rw4lok@alap3.anarazel.de
https://git.postgresql.org/pg/commitdiff/79a3efb84d09b1e98ad7bb2756fa570efb578d1d

Heikki Linnakangas pushed:

- Fix crash in BRIN inclusion op functions, due to missing datum copy. The BRIN
add_value() and union() functions need to make a longer-lived copy of the
argument, if they want to store it in the BrinValues struct also passed as
argument. The functions for the "inclusion operator classes" used with box,
range and inet types didn't take into account that the union helper function
might return its argument as is, without making a copy. Check for that case,
and make a copy if necessary. That case arises at least with the range_union()
function, when one of the arguments is an 'empty' range: CREATE TABLE
brintest (n numrange); CREATE INDEX brinidx ON brintest USING brin (n); INSERT
INTO brintest VALUES ('empty'); INSERT INTO brintest VALUES (numrange(0,
2^1000::numeric)); INSERT INTO brintest VALUES ('(-1, 0)'); SELECT
brin_desummarize_range('brinidx', 0); SELECT brin_summarize_range('brinidx',
0); Backpatch down to 9.5, where BRIN was introduced. Discussion:
https://www.postgresql.org/message-id/e6e1d6eb-0a67-36aa-e779-bcca59167c14%40iki.fi
Reviewed-by: Emre Hasegeli, Tom Lane, Alvaro Herrera
https://git.postgresql.org/pg/commitdiff/4c87010981f3a9a41751e5550f6eb889ab5667e8

- Refactor XLogReadRecord(), adding XLogBeginRead() function. The signature of
XLogReadRecord() required the caller to pass the starting WAL position as
argument, or InvalidXLogRecPtr to continue reading at the end of previous
record. That's slightly awkward to the callers, as most of them don't want to
randomly jump around in the WAL stream, but start reading at one position and
then read everything from that point onwards. Remove the 'RecPtr' argument and
add a new function XLogBeginRead() to specify the starting position instead.
That's more convenient for the callers. Also, xlogreader holds state that is
reset when you change the starting position, so having a separate function for
doing that feels like a more natural fit. This changes XLogFindNextRecord()
function so that it doesn't reset the xlogreader's state to what it was before
the call anymore. Instead, it positions the xlogreader to the found record,
like XLogBeginRead(). Reviewed-by: Kyotaro Horiguchi, Alvaro Herrera
Discussion:
https://www.postgresql.org/message-id/5382a7a3-debe-be31-c860-cb810c08f366%40iki.fi
https://git.postgresql.org/pg/commitdiff/38a957316d7e46d4b00de40f43966984a463d80a

Michaël Paquier pushed:

- Add GUC variables for stat tracking and timeout as PGDLLIMPORT. This helps
integration of extensions with Windows. The following parameters are changed:
- idle_in_transaction_session_timeout (9.6 and newer versions) - lock_timeout
- statement_timeout - track_activities - track_counts - track_functions
Author: Pascal Legrand Reviewed-by: Amit Kamila, Julien Rouhaud, Michael
Paquier Discussion: https://postgr.es/m/1579298868581-0.post@n3.nabble.com
Backpatch-through: 9.4
https://git.postgresql.org/pg/commitdiff/62c9b522311afd791fd92fe46a294f7e21f10540

- Fix concurrent indexing operations with temporary tables. Attempting to use
CREATE INDEX, DROP INDEX or REINDEX with CONCURRENTLY on a temporary relation
with ON COMMIT actions triggered unexpected errors because those operations
use multiple transactions internally to complete their work. Here is for
example one confusing error when using ON COMMIT DELETE ROWS: ERROR: index
"foo" already contains data Issues related to temporary relations and
concurrent indexing are fixed in this commit by enforcing the non-concurrent
path to be taken for temporary relations even if using CONCURRENTLY,
transparently to the user. Using a non-concurrent path does not matter in
practice as locks cannot be taken on a temporary relation by a session
different than the one owning the relation, and the non-concurrent operation
is more effective. The problem exists with REINDEX since v12 with the
introduction of CONCURRENTLY, and with CREATE/DROP INDEX since CONCURRENTLY
exists for those commands. In all supported versions, this caused only
confusing error messages to be generated. Note that with REINDEX, it was also
possible to issue a REINDEX CONCURRENTLY for a temporary relation owned by a
different session, leading to a server crash. The idea to enforce
transparently the non-concurrent code path for temporary relations comes
originally from Andres Freund. Reported-by: Manuel Rigger Author: Michael
Paquier, Heikki Linnakangas Reviewed-by: Andres Freund, Álvaro Herrera, Heikki
Linnakangas Discussion:
https://postgr.es/m/CA+u7OA6gP7YAeCguyseusYcc=uR8+ypjCcgDDCTzjQ+k6S9ksQ@mail.gmail.com
Backpatch-through: 9.4
https://git.postgresql.org/pg/commitdiff/a904abe2e284f570168839e52e18ef0b7f26179d

- Clarify some comments in vacuumlazy.c. Author: Justin Pryzby Discussion:
https://postgr.es/m/20200113004542.GA26045@telsasoft.com
https://git.postgresql.org/pg/commitdiff/f942dfb952aaccb0163564c86c0b7654b8512807

- Doc: Fix and tweak documentation for ANALYZE reporting. The docs had some
typos and grammar mistakes, and its indentation was inconsistent. Author:
Amit Langote, Justin Pryzby Discussion:
https://postgr.es/m/20200116151930.GM26045@telsasoft.com
https://git.postgresql.org/pg/commitdiff/5ba40b62318e4d941497333b72d589420a48d82f

- Doc: Fix list of storage parameters available for ALTER TABLE. Only the
parameter parallel_workers can be used directly with ALTER TABLE. Issue
introduced in 6f3a13f, so backpatch down to 10. Author: Justin Pryzby
Discussion: https://postgr.es/m/20200106025623.GA12066@telsasoft.com
Backpatch-through: 10
https://git.postgresql.org/pg/commitdiff/6de7bcb76f6593dcd107a6bfed645f2142bf3225

Andres Freund pushed:

- Fix edge case leading to agg transitions skipping ExecAggTransReparent()
calls. The code checking whether an aggregate transition value needs to be
reparented into the current context has always only compared the transition
return value with the previous transition value by datum, i.e. without regard
for NULLness. This normally works, because when the transition function
returns NULL (via fcinfo->isnull), it'll return a value that won't be the same
as its input value. But there's no hard requirement that that's the case. And
it turns out, it's possible to hit this case (see discussion or reproducers),
leading to a non-null transition value not being reparented, followed by a
crash caused by that. Instead of adding another comparison of NULLness,
instead have ExecAggTransReparent() ensure that pergroup->transValue ends up
as 0 when the new transition value is NULL. That avoids having to add an
additional branch to the much more common cases of the transition function
returning the old transition value (which is a pointer in this case), and when
the new value is different, but not NULL. In branches since 69c3936a149, also
deduplicate the reparenting code between the expression evaluation based
transitions, and the path for ordered aggregates. Reported-By: Teodor Sigaev,
Nikita Glukhov Author: Andres Freund Discussion:
https://postgr.es/m/bd34e930-cfec-ea9b-3827-a8bc50891393@sigaev.ru Backpatch:
9.4-, this issue has existed since at least 7.4
https://git.postgresql.org/pg/commitdiff/affdde2e15d9df6e9736bbb7e7cd9d56049d2f5a

Fujii Masao pushed:

- Add GUC ignore_invalid_pages. Detection of WAL records having references to
invalid pages during recovery causes PostgreSQL to raise a PANIC-level error,
aborting the recovery. Setting ignore_invalid_pages to on causes the system to
ignore those WAL records (but still report a warning), and continue recovery.
This behavior may cause crashes, data loss, propagate or hide corruption, or
other serious problems. However, it may allow you to get past the PANIC-level
error, to finish the recovery, and to cause the server to start up. Author:
Fujii Masao Reviewed-by: Michael Paquier Discussion:
https://www.postgresql.org/message-id/CAHGQGwHCK6f77yeZD4MHOnN+PaTf6XiJfEB+Ce7SksSHjeAWtg@mail.gmail.com
https://git.postgresql.org/pg/commitdiff/41c184bc642b25f67fb1d8ee290f28805fa5a0b4

- Add pg_file_sync() to adminpack extension. This function allows us to fsync
the specified file or directory. It's useful, for example, when we want to
sync the file that pg_file_write() writes out or that COPY TO exports the data
into, for durability. Author: Fujii Masao Reviewed-By: Julien Rouhaud, Arthur
Zakirov, Michael Paquier, Atsushi Torikoshi Discussion:
https://www.postgresql.org/message-id/CAHGQGwGY8uzZ_k8dHRoW1zDcy1Z7=5GQ+So4ZkVy2u=nLsk=hA@mail.gmail.com
https://git.postgresql.org/pg/commitdiff/d694e0bb793ebd6b392e6ef6a3b0a59ae66cbc95

Álvaro Herrera pushed:

- Add BRIN test case. This test case was sketched in commit message 4c87010981f3
to explain an ancient bug; it translates to a coverage increase, so add it to
the BRIN regression tests.
https://git.postgresql.org/pg/commitdiff/611ce856f5a862a291a05d148828208e1f4ed46b

Peter Eisentraut pushed:

- Fix typo.
https://git.postgresql.org/pg/commitdiff/a7a848844d74e63ee102717972de3e60b5f4549a

- Add exclusion to headercheck. src/include/common/unicode_combining_table.h is
currently not meant to be included standalone. Things could be refactored to
allow it, but that would be beyond the present purpose. So adding an
exclusion here seems best. Discussion:
https://www.postgresql.org/message-id/10754.1579535012@sss.pgh.pa.us
https://git.postgresql.org/pg/commitdiff/cc25464763f0211e59a209eb50a7b7a79449051f

Robert Haas pushed:

- Adjust src/include/utils/jsonapi.h so it's not backend-only. The major change
here is that we no longer include jsonb.h into jsonapi.h. The reason that was
necessary is that jsonapi.h included several prototypes functions in
jsonfuncs.c that depend on the Jsonb type. Move those prototypes to a new
header, jsonfuncs.h, and include it where needed. The other change is that
JsonEncodeDateTime is now declared in json.h rather than jsonapi.h. Taken
together, these steps eliminate all dependencies of jsonapi.h on backend-only
data types and header files, so that it can potentially be included in
frontend code.
https://git.postgresql.org/pg/commitdiff/ce0425b162d0a8c168e1fbab5324fb1cbca4b6b7

- Split JSON lexer/parser from 'json' data type support. Keep the code that
pertains to the 'json' data type in json.c, but move the lexing and parsing
code to a new file jsonapi.c, a name I chose because the corresponding
prototypes are in jsonapi.h. This seems like a logical division, because the
JSON lexer and parser are also used by the 'jsonb' data type, but the
SQL-callable functions in json.c are a separate thing. Also, the new jsonapi.c
file needs to include far fewer header files than json.c, which seems like a
good sign that this is an appropriate place to insert an abstraction boundary.
I took the opportunity to remove a few apparently-unneeded includes from
json.c at the same time. Patch by me, reviewed by David Steele, Mark Dilger,
and Andrew Dunstan. The previous commit was, too, but I forgot to note it in
the commit message. Discussion:
http://postgr.es/m/CA+TgmoYfOXhd27MUDGioVh6QtpD0C1K-f6ObSA10AWiHBAL5bA@mail.gmail.com
https://git.postgresql.org/pg/commitdiff/11b5e3e35d3900164cb36754ee4e4dcab0bd02f0

- Remove jsonapi.c's lex_accept(). At first glance, this function seems useful,
but it actually increases the amount of code required rather than decreasing
it. Inline the logic into the callers instead; most callers don't use the
'lexeme' argument for anything and as a result considerable simplification is
possible. Along the way, fix the header comment for the nearby function
lex_expect(), which mislabeled it as lex_accept(). Patch by me, reviewed by
David Steele, Mark Dilger, and Andrew Dunstan. Discussion:
http://postgr.es/m/CA+TgmoYfOXhd27MUDGioVh6QtpD0C1K-f6ObSA10AWiHBAL5bA@mail.gmail.com
https://git.postgresql.org/pg/commitdiff/530609aa4263bee5b5ca205d83f0dbad098d0465

Dean Rasheed pushed:

- Add functions gcd() and lcm() for integer and numeric types. These compute the
greatest common divisor and least common multiple of a pair of numbers using
the Euclidean algorithm. Vik Fearing, reviewed by Fabien Coelho. Discussion:
https://postgr.es/m/adbd3e0b-e3f1-5bbc-21db-03caf1cef0f7@2ndquadrant.com
https://git.postgresql.org/pg/commitdiff/13661ddd7eaec7e2809ff5c29fc14653b6161036

== Pending Patches ==

Ranier Vilela sent in five revisions of a patch to fix some resource leaks on
Windows.

John Dent sent in two more revisions of a patch to make it possible to for
SELECT to consume data from a REFCURSOR.

Ranier Vilela sent in a patch to fix some missing locks on Windows.

Andy Fan sent in a patch to avoid the distinct stage if the result is unique
already.

Daiho Kim sent in a patch to add a LIMIT clause to COPY.

Peter Eisentraut sent in another revision of a patch to add support for other
normal forms to Unicode normalization API, and add SQL functions for Unicode
normalization.

KaiGai Kohei and Michaël Paquier traded patches to make it possible to do a
TRUNCATE on foreign tables.

Michaël Paquier sent in another revision of a patch to make physical slot
advance be persistent.

David Fetter sent in two revisions of a patch to increase the buffer size for
passwords so they're more consistent.

Jesper Pedersen sent in another revision of a patch to implement index skip
scan.

Justin Pryzby sent in five more revisions of a patch to ensure that vacuum
errcontext shows the block being processed, add an errcontext callback in
lazy_vacuum_heap, add vacrelstats.stage and distinct context message, add
errcontext for lazy_vacuum_index, and avoid extra calls like GetRelationName.

Robert Haas and Mark Dilger traded patches to make the backend JSON parser work
in front-end code.

曾文旌(义从) sent in another revision of a patch to implement global temporary
tables.

Thomas Munro sent in a patch to reduce WaitEventSet syscall churn.

Thomas Munro sent in another revision of a patch to avoid unnecessary shmem
writes in Parallel Hash Join.

Luis Carril sent in another revision of a patch to support foreign data in
pg_dump.

Kyotaro HORIGUCHI sent in another revision of a patch to rework the WAL-skipping
optimization.

Julien Rouhaud sent in another revision of a patch to pass the query string to
the planner, and add planning counters to pg_stat_statements.

Asim R P sent in another revision of a patch to test that the replay of WAL logs
on standby does not affect syncrep, and start the WAL receiver before startup
process replays existing WAL.

Alexander Korotkov sent in another revision of a patch to psql to show access
method info.

Alexander Korotkov sent in another revision of a patch to pg_rewind to add
options to restore WAL files from archive.

Nathan Bossart sent in two revisions of a patch to add MAIN_RELATION_CLEANUP and
TOAST_TABLE_CLEANUP options to VACUUM.

Thomas Munro sent in another revision of a patch to add kqueue(2) support for
WaitEventSet.

Masahiko Sawada sent in two revisions of a patch to fix a mistaken calculation
of max_dead_tuples.

Maciek Sakrejda and Tom Lane traded patches to fix an issue that caused
duplicate workers entries in some EXPLAIN plans.

Justin Pryzby sent in two more revisions of a patch to remove a gettext erronously
re-added at 580ddce, ensure that vacuum verbose uses use ngettext() everywhere
possible, makes vacuum verbose prefix write multi-line output to clients, and
reduce to DEBUG status logged from vacuum_heap/index.

Kyotaro HORIGUCHI sent in another revision of a patch to protect syscache from
bloating with negative cache entries.

Surafel Temesgen sent in another revision of a patch to implement FETCH FIRST
... WITH TIES.

Kyotaro HORIGUCHI sent in another revision of a patch to implement a
shared-memory-based stats collector.

Sergei Kornilov sent in another revision of a patch to make it possible to
reload walreceiver's conninfo.

Sergei Kornilov sent in a patch to move temp slot logic to startup.

Álvaro Herrera and Dilip Kumar traded patches to fix an infelicity between
logical_work_mem and logical streaming of large in-progress transactions.

Amit Langote sent in two more revisions of a patch to make it possible to add
partitioned tables to publications.

Amit Langote sent in another revision of a patch to ensure that a child's TRUNCATE
and LOCK privileges are not checked when truncated recursively.

Andrew Dunstan sent in another revision of a patch to add an SSL passphrase
callback.

Paul A Jungwirth sent in another revision of a patch to add multiranges.

Amit Langote sent in a patch to fix some of the docs for progress reporting for
ANALYZE.

Mahendra Singh and Amit Kapila traded patches to add relation name in error
messages for constraint checks.

Masahiko Sawada and Amit Kapila traded patches to add a --parallel option to the
vacuumdb command.

Tom Lane, Artur Zakirov, and Juan José Santamaría Flecha traded patches to allow
to_date() and to_timestamp() to accept localized names.

Kyotaro HORIGUCHI sent in another revision of a patch to add a WAL relief vent
for replication slots.

Jehan-Guillaume de Rorthais sent in another revision of a patch to always expose
available stats from wal receiver.

Álvaro Herrera sent in another revision of a patch to fix an infelicity between
DROP OWNED CASCADE and temp tables.

David Christensen sent in a patch to be explicit about the behavior of REFRESH
PUBLICATION's copy_data.

Alexander Korotkov sent in another revision of a patch to improve the search for
missing parent downlinks in amcheck.

Pavel Stěhule sent in another revision of a patch to implement schema variables.

Masahiko Sawada sent in another revision of a patch to make it possible to have
transactions with multiple foreign servers.

Mike Lissner sent in a patch to catch the documentation of ALTER TABLE's
behavior with reindexing coercible types to match reality.

Peter Eisentraut sent in another revision of a patch to implement polymorphic
table functions.

Amit Langote sent in another revision of a patch to implement runtime pruning
for ModifyTable.

Daniel Gustafsson sent in another revision of a patch to set min/max TLS
protocol in clientside libpq.

Takashi Menjo sent in a PoC patch to implement a non-volatile WAL buffer.

Ranier Vilela sent in a patch to remove some redundant tests from xlog.c.

Julien Rouhaud sent in another revision of a patch to show planning buffers.

Jeff Davis sent in another revision of a patch to implement memory-bounded hash
aggregation.

Melanie Plageman sent in another revision of a patch to avoid hash join batch
explosions with extreme skew and weird stats.

Sehrope Sarkuni sent in another revision of a patch to implement a key
management system.

Nino Floris sent in another revision of a patch to add ltree, lquery, and
ltxtquery binary protocol support.

Vik Fearing sent in a patch to add %x to PROMPT1 and PROMPT2 in psql.

Justin Pryzby sent in a patch to vacuum verbose to show pages marked
allvisible/frozen/hintbits.

Browse pgsql-announce by date

  From Date Subject
Next Message Paul Ramsey 2020-01-28 22:21:28 FOSS4G 2020, Calgary, Canada - Call for Papers Open
Previous Message Gilles Darold 2020-01-26 10:07:38 pgFormatter v4.2 released