== PostgreSQL Weekly News - February 2, 2020 == - Mailing list pgsql-announce

From David Fetter
Subject == PostgreSQL Weekly News - February 2, 2020 ==
Date
Msg-id 20200202231049.GA25342@fetter.org
Whole thread Raw
List pgsql-announce
== PostgreSQL Weekly News - February  2, 2020 ==

PG Day Russia will be in Saint Petersburg on July 10, 2020. The CfP is open at
https://pgday.ru/en/2020/for-speakers through April 6, 2020.
https://pgday.ru/en/2020/

FOSS4G 2020, will take place in Calgary, Alberta, Canada August 24-29 2020.
the Call for Papers is currently open at https://2020.foss4g.org/speakers/ If
you submit before February 4, your paper will be eligible for early acceptance,
so consider submitting soon at https://2020.foss4g.org/early-acceptance/
https://2020.foss4g.org/

== PostgreSQL Product News ==

PostGIS 3.1.0alph1, the industry standard geographic information system package
for PostgreSQL, released.
https://postgis.net/2020/02/02/postgis-3.1.0alpha1

pgFormatter 4.2, a formatter/beautifier for SQL code, released.
http://sqlformat.darold.net/

MobilityDB 1.0 beta1, an open-source extension that adds support for temporal
and spatiotemporal objects to PostgreSQL and its spatial extension PostGIS,
released.
https://github.com/ULB-CoDE-WIT/MobilityDB

explain-running-query, an eponymous Python program, released.
https://github.com/StarfishStorage/explain-running-query

== PostgreSQL Jobs for February ==

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

== 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@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@fetter.org.

== Applied Patches ==

Tom Lane pushed:

- In postgres_fdw, don't try to ship MULTIEXPR updates to remote server. In a
  statement like "UPDATE remote_tab SET (x,y) = (SELECT ...)", we'd conclude
  that the statement could be directly executed remotely, because the sub-SELECT
  is in a resjunk tlist item that's not examined for shippability.  Currently
  that ends up crashing if the sub-SELECT contains any remote Vars.  Prevent the
  crash by deeming MULTIEXEC Params to be unshippable.  This is a bit of a
  brute-force solution, since if the sub-SELECT *doesn't* contain any remote
  Vars, the current execution technology would work; but that's not a terribly
  common use-case for this syntax, I think.  In any case, we generally don't try
  to ship sub-SELECTs, so it won't surprise anybody that this doesn't end up as
  a remote direct update.  I'd be inclined to see if that general limitation can
  be fixed before worrying about this case further.  Per report from Lukáš
  Sobotka.  Back-patch to 9.6.  9.5 had MULTIEXPR, but we didn't try to perform
  remote direct updates then, so the case didn't arise anyway.  Discussion:
  https://postgr.es/m/CAJif3k+iA_ekBB5Zw2hDBaE1wtiQa4LH4_JUXrrMGwTrH0J01Q@mail.gmail.com
  https://git.postgresql.org/pg/commitdiff/215824f9188a2b19f870e6a707c5a81e1ac3f1fc

- Fix EXPLAIN (SETTINGS) to follow policy about when to print empty fields. In
  non-TEXT output formats, the "Settings" field should appear when requested,
  even if it would be empty.  Also, get rid of the premature optimization of
  counting all the GUC_EXPLAIN variables at startup.  Since there was no
  provision for adjusting that count later, all it'd take would be some
  extension marking a parameter as GUC_EXPLAIN to risk an assertion failure or
  memory stomp. We could make get_explain_guc_options() count those variables
  on-the-fly, or dynamically resize its array ... but TBH I do not think that
  making a transient array of pointers a bit smaller is worth any extra
  complication, especially when you consider all the other transient space
  EXPLAIN eats. So just allocate that array at the max possible size.  In HEAD,
  also add some regression test coverage for this feature.  Because of the
  memory-stomp hazard, back-patch to v12 where this feature was added.
  Discussion: https://postgr.es/m/19416.1580069629@sss.pgh.pa.us
  https://git.postgresql.org/pg/commitdiff/3ec20c7091e97a554e7447ac2b7f4ed795631395

- Apply project best practices to switches over enum values. In the wake of
  1f3a02173, assorted buildfarm members were warning about "control reaches end
  of non-void function" or the like.  Do what we've done elsewhere: in place of
  a "default" switch case that will prevent the compiler from warning about
  unhandled enum values, put a catchall elog() after the switch.  And return a
  dummy value to satisfy compilers that don't know elog() doesn't return.
  https://git.postgresql.org/pg/commitdiff/4589c6a2a30faba53d0655a8e3a29b54d28bb6f6

- Fix dangling pointer in EvalPlanQual machinery. EvalPlanQualStart() supposed
  that it could re-use the relsubs_rowmark and relsubs_done arrays from a prior
  instantiation.  But since they are allocated in the es_query_cxt of the
  recheckestate, that's just wrong; EvalPlanQualEnd() will blow away that
  storage.  Therefore we were using storage that could have been reallocated to
  something else, causing all sorts of havoc.  I think this was modeled on the
  old code's handling of es_epqTupleSlot, but since the code was anyway clearing
  the arrays at re-use, there's clearly no expectation of importing any outside
  state.  So it's just a dubious savings of a couple of pallocs, which is
  negligible compared to setting up a new planstate tree.  Therefore, just
  allocate the arrays always.  (I moved the allocations slightly for
  readability.)  In principle this bug could cause a problem whenever EPQ
  rechecks are needed in more than one target table of a ModifyTable plan node.
  In practice it seems not quite so easy to trigger as that; I couldn't readily
  duplicate a crash with a partitioned target table, for instance. That's
  probably down to incidental choices about when to free or reallocate stuff.
  The added isolation test case does seem to reliably show an assertion failure,
  though.  Per report from Oleksii Kliukin.  Back-patch to v12 where the bug was
  introduced (evidently by commit 3fb307bc4).  Discussion:
  https://postgr.es/m/EEF05F66-2871-4786-992B-5F45C92FEE2E@hintbits.com
  https://git.postgresql.org/pg/commitdiff/01d9676a53af075feb42d2f83ddb8c61186812fc

- Teach plpgsql's "make clean" to remove generated test files. Copy the rules
  that src/test/regress/GNUmakefile uses for this purpose. Since these files are
  .gitignore'd, the mistake wasn't obvious unless you happened to look at "git
  status --ignored" in an allegedly clean tree.  Oversight in commit 1858b105b.
  No need for back-patch since that's not in the back branches.
  https://git.postgresql.org/pg/commitdiff/166ab9c8d343b51e6838d7b59194d32a0019242f

- Invent "trusted" extensions, and remove the pg_pltemplate catalog. This patch
  creates a new extension property, "trusted".  An extension that's marked that
  way in its control file can be installed by a non-superuser who has the CREATE
  privilege on the current database, even if the extension contains objects that
  normally would have to be created by a superuser.  The objects within the
  extension will (by default) be owned by the bootstrap superuser, but the
  extension itself will be owned by the calling user.  This allows replicating
  the old behavior around trusted procedural languages, without all the
  special-case logic in CREATE LANGUAGE.  We have, however, chosen to loosen the
  rules slightly: formerly, only a database owner could take advantage of the
  special case that allowed installation of a trusted language, but now anyone
  who has CREATE privilege can do so.  Having done that, we can delete the
  pg_pltemplate catalog, moving the knowledge it contained into the extension
  script files for the various PLs.  This ends up being no change at all for the
  in-core PLs, but it is a large step forward for external PLs: they can now
  have the same ease of installation as core PLs do.  The old "trusted PL"
  behavior was only available to PLs that had entries in pg_pltemplate, but now
  any extension can be marked trusted if appropriate.  This also removes one of
  the stumbling blocks for our Python 2 -> 3 migration, since the association of
  "plpythonu" with Python 2 is no longer hard-wired into pg_pltemplate's initial
  contents.  Exactly where we go from here on that front remains to be settled,
  but one problem is fixed.  Patch by me, reviewed by Peter Eisentraut, Stephen
  Frost, and others.  Discussion:
  https://postgr.es/m/5889.1566415762@sss.pgh.pa.us
  https://git.postgresql.org/pg/commitdiff/50fc694e43742ce3d04a5e9f708432cb022c5f0d

- Fix vcregress.pl for new plperl test case. As of commit 50fc694e4, the plperl
  tests don't want preinstalled plperl languages; they now install those
  themselves.  I'd removed the --load-extension options from the GNUmakefile,
  but missed teaching the MSVC build script about that.  Per buildfarm.
  https://git.postgresql.org/pg/commitdiff/26a81bb8152bd9f29bc24c1edfc00e2cbcd68548

- Fix test failure with non-MULTIPLICITY Perl interpreters. Per buildfarm.
  https://git.postgresql.org/pg/commitdiff/2520cf8c2a0a1d679094dffbd99871884e620ed5

- In jsonb_plpython.c, suppress warning message from gcc 10. Very recent gcc
  complains that PLyObject_ToJsonbValue could return a pointer to a local
  variable.  I think it's wrong; but the coding is fragile enough, and the
  savings of one palloc() minimal enough, that it seems better to just do a
  palloc() all the time.  (My other idea of tweaking the if-condition doesn't
  suppress the warning.)  Back-patch to v11 where this code was introduced.
  Discussion: https://postgr.es/m/21547.1580170366@sss.pgh.pa.us
  https://git.postgresql.org/pg/commitdiff/a069218163704c44a8996e7e98e765c56e2b9c8e

- Fix parallel pg_dump/pg_restore for failure to create worker processes. If we
  failed to fork a worker process, or create a communication pipe for one,
  WaitForTerminatingWorkers would suffer an assertion failure if assert-enabled,
  otherwise crash or go into an infinite loop.  This was a consequence of not
  accounting for the startup condition where we've not yet forked all the
  workers.  The original bug was that ParallelBackupStart would set workerStatus
  to WRKR_IDLE before it had successfully forked a worker.  I made things worse
  in commit b7b8cc0cf by not understanding the undocumented fact that the
  WRKR_TERMINATED state was also meant to represent the case where a worker
  hadn't been started yet: I changed enum T_WorkerStatus so that *all* the
  worker slots were initially in WRKR_IDLE state.  But this wasn't any more
  broken in practice, since even one slot in the wrong state would keep
  WaitForTerminatingWorkers from terminating.  In v10 and later, introduce an
  explicit T_WorkerStatus value for worker-not-started, in hopes of preventing
  future oversights of the same ilk.  Before that, just document that
  WRKR_TERMINATED is supposed to cover that case (partly because it wasn't
  actively broken, and partly because the enum is exposed outside parallel.c in
  those branches, so there's microscopically more risk involved in changing it).
  In all branches, introduce a WORKER_IS_RUNNING status test macro to hide which
  T_WorkerStatus values mean that, and be more careful not to access
  ParallelSlot fields till we're sure they're valid.  Per report from Vignesh C,
  though this is my patch not his. Back-patch to all supported branches.
  Discussion:
  https://postgr.es/m/CALDaNm1Luv-E3sarR+-unz-BjchquHHyfP+YC+2FS2pt_J+wxg@mail.gmail.com
  https://git.postgresql.org/pg/commitdiff/2425f8f714a15fa0fa6fa2f656ad546cbb78e2d6

- Fix CheckAttributeType's handling of collations for ranges. Commit fc7695891
  changed CheckAttributeType to recurse into ranges, but made it pass down the
  wrong collation (always InvalidOid, since ranges as such have no collation).
  This would result in guaranteed failure when considering a range type whose
  subtype is collatable.  Embarrassingly, we lack any regression tests that
  would expose such a problem (but fortunately, somebody noticed before we
  shipped this bug in any release).  Fix it to pass down the range's subtype
  collation property instead, and add some regression test cases to exercise
  collatable-subtype ranges a bit more.  Back-patch to all supported branches,
  as the previous patch was.  Report and patch by Julien Rouhaud, test cases
  tweaked by me  Discussion:
  https://postgr.es/m/CAOBaU_aBWqNweiGUFX0guzBKkcfJ8mnnyyGC_KBQmO12Mj5f_A@mail.gmail.com
  https://git.postgresql.org/pg/commitdiff/74b35eb468dcf353e25afd4acfc7ee2b2022d6b6

- Fix not-quite-right string comparison in parse_jsonb_index_flags(). This code
  would accept "strinX", where X is any 1-byte character, as meaning "string".
  Clearly it wasn't meant to do that.  No back-patch, since this doesn't affect
  correct queries and there's some tiny chance we'd break somebody's incorrect
  query in a minor release.  Report and patch by Dominik Czarnota.  Discussion:
  https://postgr.es/m/CABEVAa1dU0mDCAfaT8WF2adVXTDsLVJy_izotg6ze_hh-cn8qQ@mail.gmail.com
  https://git.postgresql.org/pg/commitdiff/870ad6a59bbbd95c2dc3cfe67b07d0e079599edf

- Fix assorted error-cleanup bugs in SSL min/max protocol version code. The
  error exits added to initialize_SSL() failed to clean up the partially-built
  SSL_context, and some of them also leaked the result of SSLerrmessage().  Make
  them match other error-handling cases in that function.  The error exits added
  to connectOptions2() failed to set conn->status like every other error exit in
  that function.  In passing, make the SSL_get_peer_certificate() error exit
  look more like all the other calls of SSLerrmessage().  Oversights in commit
  ff8ca5fad.  Coverity whined about leakage of the SSLerrmessage() results; I
  noted the rest in manual code review.
  https://git.postgresql.org/pg/commitdiff/6148e2b9a6399b77e10e277c32d701b84703820f

Thomas Munro pushed:

- Refactor confusing code in _mdfd_openseg(). As reported independently by a
  couple of people, _mdfd_openseg() is coded in a way that seems to imply that
  the segments could be opened in an order that isn't strictly sequential.  Even
  if that were true, it's also using the wrong comparison.  It's not an active
  bug, since the condition is always true anyway, but it's confusing, so replace
  it with an assertion.  Author: Thomas Munro Reviewed-by: Andres Freund,
  Kyotaro Horiguchi, Noah Misch Discussion:
  https://postgr.es/m/CA%2BhUKG%2BNBw%2BuSzxF1os-SO6gUuw%3DcqO5DAybk6KnHKzgGvxhxA%40mail.gmail.com
  Discussion: https://postgr.es/m/20191222091930.GA1280238%40rfd.leadboat.com
  https://git.postgresql.org/pg/commitdiff/f37ff03478aefb5e01d748b85ad86e6213624992

- Avoid unnecessary shm writes in Parallel Hash Join. Currently, Parallel Hash
  Join cannot be used for full/right joins, so there is no point in setting the
  match flag.  It turns out that the cache coherence traffic generated by those
  writes slows down large systems running many-core joins, so let's stop doing
  that. In future, if we need to use match bits in parallel joins, we might want
  to consider setting them only if not already set.  Back-patch to 11, where
  Parallel Hash Join arrived.  Reported-by: Deng, Gang Discussion:
  https://postgr.es/m/0F44E799048C4849BAE4B91012DB910462E9897A%40SHSMSX103.ccr.corp.intel.com
  https://git.postgresql.org/pg/commitdiff/3e4818e9dd5be294d97ca67012528cb1c0b0ccaa

- Remove dependency on HeapTuple from predicate locking functions. The following
  changes make the predicate locking functions more generic and suitable for use
  by future access methods:  - PredicateLockTuple() is renamed to
  PredicateLockTID().  It takes   ItemPointer and inserting transaction ID
  instead of HeapTuple.  - CheckForSerializableConflictIn() takes blocknum
  instead of buffer.  - CheckForSerializableConflictOut() no longer takes
  HeapTuple or buffer.  Author: Ashwin Agrawal Reviewed-by: Andres Freund,
  Kuntal Ghosh, Thomas Munro Discussion:
  https://postgr.es/m/CALfoeiv0k3hkEb3Oqk%3DziWqtyk2Jys1UOK5hwRBNeANT_yX%2Bng%40mail.gmail.com
  https://git.postgresql.org/pg/commitdiff/6f38d4dac381b5b8bead302a0b4f81761042cd25

- Don't reset latch in ConditionVariablePrepareToSleep(). It's not OK to do that
  without calling CHECK_FOR_INTERRUPTS(). Let the next wait loop deal with it,
  following the usual pattern.  One consequence of this bug was that a SIGTERM
  delivered in a very narrow timing window could leave a parallel worker process
  waiting forever for a condition variable that will never be signaled, after an
  error was raised in other process.  The code is a bit different in the stable
  branches due to commit 1321509f, making problems less likely there.  No
  back-patch for now, but we may finish up deciding to make a similar change
  after more discussion.  Author: Thomas Munro Reviewed-by: Shawn Debnath
  Reported-by: Tomas Vondra Discussion:
  https://postgr.es/m/CA%2BhUKGJOm8zZHjVA8svoNT3tHY0XdqmaC_kHitmgXDQM49m1dA%40mail.gmail.com
  https://git.postgresql.org/pg/commitdiff/78aaa0e82335527b8cc91601c98c9abbbc3ef3ee

- Fix compile error on HP C. Per build farm animal anole, after commit
  6f38d4dac3.
  https://git.postgresql.org/pg/commitdiff/11da6bccd178c1e0d5b0fbc4bccc538f8a005dd3

- Handle lack of DSM slots in parallel btree build. If no DSM slots are
  available, a ParallelContext can still be created, but its seg pointer is
  NULL.  Teach parallel btree build to cope with that by falling back to a
  regular non-parallel build, to avoid crashing with a segmentation fault.
  Back-patch to 11, where parallel CREATE INDEX landed.  Reported-by: Nicola
  Contu Reviewed-by: Peter Geoghegan Discussion:
  https://postgr.es/m/CA%2BhUKGJgJEBnkuODBVomyK3MWFvDBbMVj%3Dgdt6DnRPU-5sQ6UQ%40mail.gmail.com
  https://git.postgresql.org/pg/commitdiff/74618e77b43cfce670b4725d5b9a300a2afd12d1

- Adjust DSM and DSA slot usage constants. When running a lot of large parallel
  queries concurrently, or a plan with a lot of separate Gather nodes, it is
  possible to run out of DSM slots. There are better solutions to these problems
  requiring architectural redesign work, but for now, let's adjust the constants
  so that it's more difficult to hit the limit.  1.  Previously, a DSA area
  would create up to four segments at each size before doubling the size.  After
  this commit, it will create only two at each size, so it ramps up faster and
  therefore needs fewer slots.  2.  Previously, the total limit on DSM slots
  allowed for 2 per connection. Switch to 5 per connection.  Also remove an
  obsolete nearby comment.  Author: Thomas Munro Reviewed-by: Robert Haas,
  Andres Freund Discussion:
  https://postre.es/m/CA%2BhUKGL6H2BpGbiF7Lj6QiTjTGyTLW_vLR%3DSn2tEBeTcYXiMKw%40mail.gmail.com
  https://git.postgresql.org/pg/commitdiff/d061ea21fc1cc1c657bb5c742f5c4a1564e82ee2

- Report time spent in posix_fallocate() as a wait event. When allocating DSM
  segments with posix_fallocate() on Linux (see commit 899bd785), report this
  activity as a wait event exactly as we would if we were using file-backed DSM
  rather than shm_open()-backed DSM.  Author: Thomas Munro Discussion:
  https://postgr.es/m/CA%2BhUKGKCSh4GARZrJrQZwqs5SYp0xDMRr9Bvb%2BHQzJKvRgL6ZA%40mail.gmail.com
  https://git.postgresql.org/pg/commitdiff/ef02fb15a35ab7bd74a79afebf35572ed82b5e9f

- Fix memory leak on DSM slot exhaustion. If we attempt to create a DSM segment
  when no slots are available, we should return the memory to the operating
  system.  Previously we did that if the DSM_CREATE_NULL_IF_MAXSEGMENTS flag was
  passed in, but we didn't do it if an error was raised.  Repair.  Back-patch to
  9.4, where DSM segments arrived.  Author: Thomas Munro Reviewed-by: Robert
  Haas Reported-by: Julian Backes Discussion:
  https://postgr.es/m/CA%2BhUKGKAAoEw-R4om0d2YM4eqT1eGEi6%3DQot-3ceDR-SLiWVDw%40mail.gmail.com
  https://git.postgresql.org/pg/commitdiff/93745f1e019543fe7b742d0c5e971aad8d08fd56

Michaël Paquier pushed:

- Fix some memory leaks and improve restricted token handling on Windows. The
  leaks have been detected by a Coverity run on Windows.  No backpatch is done
  as the leaks are minor.  While on it, make restricted token creation more
  consistent in its error handling by logging an error instead of a warning if
  missing advapi32.dll, which was missing in the NT4 days.  Any modern platform
  should have this DLL around.  Now, if the library is not there, an error is
  still reported back to the caller, and nothing is done do there is no behavior
  change done in this commit.  Author: Ranier Vilela Discussion:
  https://postgr.es/m/CAEudQApa9MG0foPkgPX87fipk=vhnF2Xfg+CfUyR08h4R7Mywg@mail.gmail.com
  https://git.postgresql.org/pg/commitdiff/10a525230fb18331dbcfd6a4a7248d76f55c331c

- Add connection parameters to control SSL protocol min/max in libpq. These two
  new parameters, named sslminprotocolversion and sslmaxprotocolversion, allow
  to respectively control the minimum and the maximum version of the SSL
  protocol used for the SSL connection attempt. The default setting is to allow
  any version for both the minimum and the maximum bounds, causing libpq to rely
  on the bounds set by the backend when negotiating the protocol to use for an
  SSL connection.  The bounds are checked when the values are set at the
  earliest stage possible as this makes the checks independent of any SSL
  implementation.  Author: Daniel Gustafsson Reviewed-by: Michael Paquier, Cary
  Huang Discussion:
  https://postgr.es/m/4F246AE3-A7AE-471E-BD3D-C799D3748E03@yesql.se
  https://git.postgresql.org/pg/commitdiff/ff8ca5fadd819155c82bd16fcc6b7231af649cf8

- Fix dispsize for libpq connection parameters channel_binding and gssencmode.
  channel_binding's longest allowed value is not "7", it is actually "8".
  gssencmode also got that wrong.  A similar mistake has been fixed as of
  f4051e3.  Backpatch down to v12, where gssencmode has been introduced.
  Reviewed-by: Daniel Gustafsson Discussion:
  https://postgr.es/m/20200128053633.GD1552@paquier.xyz Backpatch-through: 12
  https://git.postgresql.org/pg/commitdiff/29e321cdd63ea48fd0223447d58f4742ad729eb0

- Fix slot data persistency when advancing physical replication slots. Advancing
  a physical replication slot with pg_replication_slot_advance() did not mark
  the slot as dirty if any advancing was done, preventing the follow-up
  checkpoint to flush the slot data to disk.  This caused the advancing to be
  lost even on clean restarts.  This does not happen for logical slots as any
  advancing marked the slot as dirty.  Per discussion, the original feature has
  been implemented so as in the event of a crash the slot may move backwards to
  a past LSN.  This property is kept and more documentation is added about that.
  This commit adds some new TAP tests to check the persistency of physical and
  logical slots after advancing across clean restarts.  Author: Alexey
  Kondratov, Michael Paquier Reviewed-by: Andres Freund, Kyotaro Horiguchi,
  Craig Ringer Discussion:
  https://postgr.es/m/059cc53a-8b14-653a-a24d-5f867503b0ee@postgrespro.ru
  Backpatch-through: 11
  https://git.postgresql.org/pg/commitdiff/b0afdcad21fde1470e6502a376bfaf0e10d384fa

- Fix typo in recently-added TAP test for replication slots. Oversight in commit
  b0afdca.
  https://git.postgresql.org/pg/commitdiff/7ca8c9706a5785feef5d5eff0078c5361694b274

- Prevent running pg_basebackup as root. Similarly to pg_upgrade, pg_ctl and
  initdb, a root user is able to use --version and --help, but cannot execute
  the actual operation to avoid the creation of files with permissions
  incompatible with the postmaster.  This is a behavior change, so not
  back-patching is done.  Author: Ian Barwick Discussion:
  https://postgr.es/m/CABvVfJVqOdD2neLkYdygdOHvbWz_5K_iWiqY+psMfA=FeAa3qQ@mail.gmail.com
  https://git.postgresql.org/pg/commitdiff/7bae0ad9fcb76b28410571dc71edfdc3175c4a02

Robert Haas pushed:

- Adjust pg_parse_json() so that it does not directly ereport(). Instead, it now
  returns a value indicating either success or the type of error which occurred.
  The old behavior is still available by calling pg_parse_json_or_ereport(). If
  the new interface is used, an error can be thrown by passing the return value
  of pg_parse_json() to json_ereport_error().  pg_parse_json() can still elog()
  in can't-happen cases, but it seems like that issue is best handled
  separately.  Adjust json_lex() and json_count_array_elements() to return an
  error code, too.  This is all in preparation for making the backend's json
  parser available to frontend code.  Reviewed and/or tested by Mark Dilger and
  Andrew Dunstan.  Discussion:
  http://postgr.es/m/CA+TgmoYfOXhd27MUDGioVh6QtpD0C1K-f6ObSA10AWiHBAL5bA@mail.gmail.com
  https://git.postgresql.org/pg/commitdiff/1f3a021730be98b880d94cabbe21de7e4d8136f5

- Move some code from jsonapi.c to jsonfuncs.c. Specifically, move those
  functions that depend on ereport() from jsonapi.c to jsonfuncs.c, in
  preparation for allowing jsonapi.c to be used from frontend code.  A few cases
  where elog(ERROR, ...) is used for can't-happen conditions are left alone; we
  can handle those in some other way in frontend code.  Reviewed by Mark Dilger
  and Andrew Dunstan.  Discussion:
  http://postgr.es/m/CA+TgmoYfOXhd27MUDGioVh6QtpD0C1K-f6ObSA10AWiHBAL5bA@mail.gmail.com
  https://git.postgresql.org/pg/commitdiff/73ce2a03f30b52d6bfb26bc28f1e3e1aa1637577

- Move jsonapi.c and jsonapi.h to src/common. To make this work, (1)
  makeJsonLexContextCstringLen now takes the encoding to be used as an argument;
  (2) check_stack_depth() is made to do nothing in frontend code, and (3)
  elog(ERROR, ...) is changed to pg_log_fatal + exit in frontend code.  Mark
  Dilger, reviewed and slightly revised by me.  Discussion:
  http://postgr.es/m/CA+TgmoYfOXhd27MUDGioVh6QtpD0C1K-f6ObSA10AWiHBAL5bA@mail.gmail.com
  https://git.postgresql.org/pg/commitdiff/beb4699091e9fab1c5f465056bef35c9ddf7f9fc

- Add jsonapi.c to Mkvcbuild.pm's @pgcommonallfiles. My recent commit
  beb4699091e9fab1c5f465056bef35c9ddf7f9fc caused some buildfarm breakage, as
  reported by Tom Lane. Try to repair.  This fix is extracted from a larger
  patch by Andrew Dunstan.  Discussion:
  http://postgr.es/m/8440ddc9-8347-ca64-1405-845d10e054cd@2ndQuadrant.com
  Discussion: http://postgr.es/m/14178.1580312751@sss.pgh.pa.us
  https://git.postgresql.org/pg/commitdiff/006b9dcad41956f180f9363648206fede8417592

Amit Kapila pushed:

- Added relation name in error messages for constraint checks. This gives more
  information to the user about the error and it makes such messages consistent
  with the other similar messages in the code.  Reported-by: Simon Riggs Author:
  Mahendra Singh and Simon Riggs Reviewed-by: Beena Emerson and Amit Kapila
  Discussion:
  https://postgr.es/m/CANP8+j+7YUvQvGxTrCiw77R23enMJ7DFmyA3buR+fa2pKs4XhA@mail.gmail.com
  https://git.postgresql.org/pg/commitdiff/05f18c6b6b6e4b44302ee20a042cedc664532aa2

- Add --parallel option to vacuumdb command. Commit 40d964ec99 allowed vacuum
  command to leverage multiple CPUs by invoking parallel workers to process
  indexes.  This commit provides a '--parallel' option to specify the parallel
  degree used by vacuum command.  Author: Masahiko Sawada, with few
  modifications by me Reviewed-by: Mahendra Singh and Amit Kapila Discussion:
  https://postgr.es/m/CAD21AoDTPMgzSkV4E3SFo1CH_x50bf5PqZFQf4jmqjk-C03BWg@mail.gmail.com
  https://git.postgresql.org/pg/commitdiff/47bc9ced0d0e96523e2c639c7066c9aede189ed7

Heikki Linnakangas pushed:

- Fix randAccess setting in ReadRecord(). Commit 38a957316d got this backwards.
  Author: Kyotaro Horiguchi Discussion:
  https://www.postgresql.org/message-id/20200128.194408.2260703306774646445.horikyota.ntt@gmail.com
  https://git.postgresql.org/pg/commitdiff/30012a04a6c8127397a8ab71e160d9c7e7fbe874

Peter Eisentraut pushed:

- Fail if recovery target is not reached. Before, if a recovery target is
  configured, but the archive ended before the target was reached, recovery
  would end and the server would promote without further notice.  That was
  deemed to be pretty wrong. With this change, if the recovery target is not
  reached, it is a fatal error.  Based-on-patch-by: Leif Gunnar Erlandsen
  <leif@lako.no> Reviewed-by: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
  Discussion:
  https://www.postgresql.org/message-id/flat/993736dd3f1713ec1f63fc3b653839f5@lako.no
  https://git.postgresql.org/pg/commitdiff/dc788668bb269b10a108e87d14fefd1b9301b793

- Sprinkle some const decorations. This might help clarify the API a bit.
  https://git.postgresql.org/pg/commitdiff/7c23bfd25c423b4513a16d41c5e4d09c32807155

- Allow building without default socket directory. We have code paths for Unix
  socket support and no Unix socket support. Now add a third variant: Unix
  socket support but do not use a Unix socket by default in the client or the
  server, only if you explicitly specify one.  This will be useful when we
  enable Unix socket support on Windows.  To implement this, tweak things so
  that setting DEFAULT_PGSOCKET_DIR to "" has the desired effect.  This mostly
  already worked like that; only a few places needed to be adjusted.  Notably,
  the reference to DEFAULT_PGSOCKET_DIR in UNIXSOCK_PATH() could be removed
  because all callers already resolve an empty socket directory setting with a
  default if appropriate.  Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> Discussion:
  https://www.postgresql.org/message-id/75f72249-8ae6-322a-63df-4fe03eeccb9f@2ndquadrant.com
  https://git.postgresql.org/pg/commitdiff/a9cff89f7e638c060621a62ca35da97a12adde42

Fujii Masao pushed:

- Make inherited TRUNCATE perform access permission checks on parent table only.
  Previously, TRUNCATE command through a parent table checked the permissions on
  not only the parent table but also the children tables inherited from it. This
  was a bug and inherited queries should perform access permission checks on the
  parent table only. This commit fixes that bug.  Back-patch to all supported
  branches.  Author: Amit Langote Reviewed-by: Fujii Masao Discussion:
  https://postgr.es/m/CAHGQGwFHdSvifhJE+-GSNqUHSfbiKxaeQQ7HGcYz6SC2n_oDcg@mail.gmail.com
  https://git.postgresql.org/pg/commitdiff/e6f1e560e4c6e764080af8c8d5e76cdea4d8d00a

Álvaro Herrera pushed:

- Remove excess parens in ereport() calls. Cosmetic cleanup, not worth
  backpatching.  Discussion:
  https://postgr.es/m/20200129200401.GA6303@alvherre.pgsql Reviewed-by: Tom
  Lane, Michael Paquier
  https://git.postgresql.org/pg/commitdiff/4e89c79a52f8a898edd648b56a00f0f4f840cfe7

- Clean up newlines following left parentheses. We used to strategically place
  newlines after some function call left parentheses to make pgindent move the
  argument list a few chars to the left, so that the whole line would fit under
  80 chars.  However, pgindent no longer does that, so the newlines just made
  the code vertically longer for no reason.  Remove those newlines, and reflow
  some of those lines for some extra naturality.  Reviewed-by: Michael Paquier,
  Tom Lane Discussion: https://postgr.es/m/20200129200401.GA6303@alvherre.pgsql
  https://git.postgresql.org/pg/commitdiff/c9d29775195922136c09cc980bb1b7091bf3d859

Andrew Gierth pushed:

- Optimizations for integer to decimal output. Using a lookup table of digit
  pairs reduces the number of divisions needed, and calculating the length
  upfront saves some work; these ideas are taken from the code previously
  committed for floats.  David Fetter, reviewed by Kyotaro Horiguchi, Tels, and
  me.  Discussion: https://postgr.es/m/20190924052620.GP31596%40fetter.org
  https://git.postgresql.org/pg/commitdiff/1fd687a035558238c0e3cab09fc22dc61a088869

== Pending Patches ==

Justin Pryzby sent in a patch to refactor show_hinstrument and avoid showing
memory use if not verbose, and make explain analyze show stats from (hash)
aggregate.

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

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

Mark Dilger and Andrew Dunstan traded patches to make the JSON parser work in
front-end code.

Peter Geoghegan sent in two revisions of a patch to avoid calling
BTreeTupleGetNAtts() in _bt_compare(), inline _bt_compare(), and remove the
"negative infinity" check from _bt_compare().

Peter Eisentraut sent in another revision of a patch to allow an alias to be
attached to a JOIN ... USING.

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

Dmitry Dolgov sent in another revision of a patch to implement index skip scan.

Peter Eisentraut sent in another revision of a patch to fail if recovery target
is not reached.

Álvaro Herrera sent in three revisions of a patch to use CheckPoint->time to
update latest recovery timestamp.

Justin Pryzby sent in three more revisions of a patch to ensure that vacuum
errcontext shows the block being processed, include the name of the table in the
callback for index vacuum, and add a vacuum error callback for index cleanup.

Andrey V. Lepikhov sent in another revision of a patch to remove unneeded
self-joins.

Michaël Paquier sent in a patch to add one CheckTableNotInUse() for REINDEX
CONCURRENTLY.

Thomas Munro sent in another revision of a patch to add an SQL type xid8 to
expose FullTransactionId to users, and introduce xid8 variants of the txid_XXX()
fmgr functions.

Kyotaro HORIGUCHI sent in a patch to fix the randAccess setting in ReadRecrod.

Kyotaro HORIGUCHI sent in another revision of a patch to move a callback-call
from ReadPageInternal to XLogReadRecord.

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

Mike Lissner sent in a patch to document the fact that binary-coercible types
don't do index rewrites.

Robert Haas sent in two revisions of a patch to teach the MemoryContext
infrastructure not to depend on Node.

Michaël Paquier sent in a patch to fix some incorrect option sizes for
PQconninfoOption in libpq.

Mark Dilger sent in another revision of a patch to improve the
partition-matching for partitionwise join, and fix the handling of NULL
partitions, along with some tests for same.

Kyotaro HORIGUCHI sent in a patch to refactor init_from_backup.

Julien Rouhaud sent in another revision of a patch to expose the lock group
leader pid in pg_stat_activity.

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

Thomas Munro sent in another revision of a patch to pipeline functionscan.

Peter Geoghegan sent in another revision of a patch to add deduplication to
nbtree.

Amit Langote sent in another revision of a patch to support adding partitioned
tables to publications.

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

Mark Wong sent in another revision of a patch to implement kqueue.

Vigneshwaran C sent in a patch to update the documentation for the server
message not being displayed when the client connection is closed by the server.

Mark Dilger sent in a WIP patch to demonstrated the problem of a hash join not
finding which collation to use for string hashing.

Kyotaro HORIGUCHI sent in a patch to prevent fetching out-of-timeline segments.

Kasahara Tatsuhito sent in two revisions of a patch to fix tidscan increments
seqscan number.

Fujii Masao sent in a PoC patch to implement pg_stat_progress_basebackup.

Asif Rehman sent in another revision of a patch to implement parallel
base_backup.

Sergei Kornilov sent in another revision of a patch to test promote while
recovery target action paused, and improve recovery target action behavior.

Michael Banck and Michaël Paquier traded patches to make pg_checksums skip
foreign tablespace directories.

Álvaro Herrera fix a bug that manifested as duplicated LSN in ReorderBuffer.

Ian Barwick sent in two revisions of a patch to prevent pg_basebackup from
running as root.

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

Michaël Paquier sent in another revision of a patch to add declaration-level
assertions, and refactor the assertion definitions in c.h.

Sergei Kornilov sent in another revision of a patch to allow online changes to
primary_conninfo in walreceiver.

Andy Fan sent in a patch to remove the distinctClause if the result is unique by
definition.

Juan José Santamaría Flecha sent in another revision of a patch to allow
localized month names to_date.

Álvaro Herrera sent in another revision of a patch to fix REPLICA IDENTITY FULL.

David Fetter sent in another revision of a patch to spread pg_bitutils into
hashing.

Julien Rouhaud sent in a patch to fix collatable_range.

Álvaro Herrera sent in a patch to widen the vacuum buffer counters.

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

Fabien COELHO sent in another revision of a patch to pgbench to add a
pseudo-random permutation function.

Tom Lane sent in a patch to fix an issue that caused potentially malformed JSON
in EXPLAIN output by placing subnodes removed correctly.

Pierre Ducroquet sent in a patch to add support for IN clauses in dependencies
check, and add support for array contains in dependency check.

Justin Pryzby sent in a patch to preserve CLUSTER ON during ALTER TABLE.

Noah Misch sent in a patch to ensure that when a TAP file has non-zero exit
status, temporary directories are retained.




pgsql-announce by date:

Previous
From: Mototaka Kanematsu
Date:
Subject: High-Performance SQL Cluster Engine PGSpider released
Next
From: Hans-Jürgen Schönig
Date:
Subject: Announcing pgday.at Austria 2020