# PostgreSQL Weekly News - November 29, 2020

# PostgreSQL Product News

Pgpool-II 4.2.0, a connection pooler and statement replication system for
PostgreSQL, released.
[https://www.pgpool.net/docs/42/en/html/release-4-2-0.html](https://www.pgpool.net/docs/42/en/html/release-4-2-0.html)

pgBadger v11.4, a PostgreSQL log analyzer and graph tool written in
Perl, released.
[https://github.com/darold/pgbadger/releases](https://github.com/darold/pgbadger/releases)

Database Lab 2.0, a tool for fast cloning of large PostgreSQL databases to
build non-production environments, released:
[https://postgres.ai/blog/dle-2.0-release/](https://postgres.ai/blog/dle-2.0-release/)

pgagroal 1.0.0, a high-performance protocol-native connection pool for
PostgreSQL, released.
[https://agroal.github.io/pgagroal/release/announcement/2020/11/24/pgagroal-1.0.0.html](https://agroal.github.io/pgagroal/release/announcement/2020/11/24/pgagroal-1.0.0.html)

# PostgreSQL Jobs for November

[http://archives.postgresql.org/pgsql-jobs/2020-11/](http://archives.postgresql.org/pgsql-jobs/2020-11/)

# PostgreSQL in the News

Planet PostgreSQL: 
[http://planet.postgresql.org/](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 [email protected].

# Applied Patches

Tom Lane pushed:

- Allow a multi-row INSERT to specify DEFAULTs for a generated column. One can
  say "INSERT INTO tab(generated_col) VALUES (DEFAULT)" and not draw an error.
  But the equivalent case for a multi-row VALUES list always threw an error,
  even if one properly said DEFAULT in each row. Fix that.  While here, improve
  the test cases for nearby logic about OVERRIDING SYSTEM/USER values.  Dean
  Rasheed  Discussion: 
[https://postgr.es/m/[email protected]](https://postgr.es/m/[email protected])
  
[https://git.postgresql.org/pg/commitdiff/17958972fe3bb03454a4b53756b29d65dc285efa](https://git.postgresql.org/pg/commitdiff/17958972fe3bb03454a4b53756b29d65dc285efa)

- Improve wording of two error messages related to generated columns. Clarify
  that you can "insert" into a generated column as long as what you're inserting
  is a DEFAULT placeholder.  Also, use ERRCODE_GENERATED_ALWAYS in place of
  ERRCODE_SYNTAX_ERROR; there doesn't seem to be any reason to use the less
  specific errcode.  Discussion: 
[https://postgr.es/m/[email protected]](https://postgr.es/m/[email protected])
  
[https://git.postgresql.org/pg/commitdiff/d36228a9fcdccd57a7dc332572eb9837c7c301e6](https://git.postgresql.org/pg/commitdiff/d36228a9fcdccd57a7dc332572eb9837c7c301e6)

- Rename the "point is strictly above/below point" comparison operators.
  Historically these were called >^ and <^, but that is inconsistent with the
  similar box, polygon, and circle operators, which are named |>> and <<|
  respectively.  Worse, the >^ and <^ names are used for *not* strict
  above/below tests for the box type.  Hence, invent new operators following the
  more common naming.  The old operators remain available for now, and are still
  accepted by the relevant index opclasses too.  But there's a deprecation
  notice, so maybe we can get rid of them someday.  Emre Hasegeli, reviewed by
  Pavel Borisov  Discussion: 
[https://postgr.es/m/[email protected]](https://postgr.es/m/[email protected])
  
[https://git.postgresql.org/pg/commitdiff/0cc99327888840f2bf572303b68438e4caf62de9](https://git.postgresql.org/pg/commitdiff/0cc99327888840f2bf572303b68438e4caf62de9)

- Remove unnecessary #include. Justin Pryzby  Discussion:
  
[https://postgr.es/m/[email protected]](https://postgr.es/m/[email protected])
  
[https://git.postgresql.org/pg/commitdiff/3b9b01f75d6e2d7bf9e0bf8ec958ce420aa037c2](https://git.postgresql.org/pg/commitdiff/3b9b01f75d6e2d7bf9e0bf8ec958ce420aa037c2)

- Centralize logic for skipping useless ereport/elog calls. While ereport() and
  elog() themselves are quite cheap when the error message level is too low to
  be printed, some places need to do substantial work before they can call those
  macros at all.  To allow optimizing away such setup work when nothing is to be
  printed, make elog.c export a new function
  message_level_is_interesting(elevel) that reports whether ereport/elog will do
  anything.  Make use of that in various places that had ad-hoc direct tests of
  log_min_messages etc. Also teach ProcSleep to use it to avoid some work.
  (There may well be other places that could usefully use this; I didn't search
  hard.)  Within elog.c, refactor a little bit to avoid having duplicate copies
  of the policy-setting logic.  When that code was written, we weren't relying
  on the availability of inline functions; so it had some duplications in the
  name of efficiency, which I got rid of.  Alvaro Herrera and Tom Lane
  Discussion: 
[https://postgr.es/m/[email protected]](https://postgr.es/m/[email protected])
  
[https://git.postgresql.org/pg/commitdiff/789b938bf2b8e38d0894261eae6bc84bbbb4714e](https://git.postgresql.org/pg/commitdiff/789b938bf2b8e38d0894261eae6bc84bbbb4714e)

- Put "inline" marker on declarations of inline functions. I'm having a hard
  time telling whether the letter of the C standard requires this, but we do
  have a couple of buildfarm members that throw warnings when this is not done.
  Oversight in c532d15dd.
  
[https://git.postgresql.org/pg/commitdiff/ec05bafdbbf474bf0a1416772da31f9f1f27fa1e](https://git.postgresql.org/pg/commitdiff/ec05bafdbbf474bf0a1416772da31f9f1f27fa1e)

- Avoid spamming the client with multiple ParameterStatus messages. Up to now,
  we sent a ParameterStatus message to the client immediately upon any change in
  the active value of any GUC_REPORT variable.  This was only barely okay when
  the feature was designed; now that we have things like function SET clauses,
  there are very plausible use-cases where a GUC_REPORT variable might change
  many times within a query --- and even end up back at its original value,
  perhaps.  Fortunately most of our GUC_REPORT variables are unlikely to be
  changed often; but there are proposals in play to enlarge that set, or even
  make it user-configurable.  Hence, let's fix things to not generate more than
  one ParameterStatus message per variable per query, and to not send any
  message at all unless the end-of-query value is different from what we last
  reported.  Discussion: 
[https://postgr.es/m/[email protected]](https://postgr.es/m/[email protected])
  
[https://git.postgresql.org/pg/commitdiff/2432b1a04087edc2fd9536c7c9aa4ca03fd1b363](https://git.postgresql.org/pg/commitdiff/2432b1a04087edc2fd9536c7c9aa4ca03fd1b363)

- Doc: minor improvements for section 11.2 "Index Types". Break the
  per-index-type discussions into <sect2>'s so as to make them more visually
  separate and easier to find.  Improve the markup, and make a couple of small
  wording adjustments.  This also fixes one stray reference to the
  now-deprecated point operators <^ and >^.  Dagfinn Ilmari Mannsåker, reviewed
  by David Johnston and Jürgen Purtz  Discussion:
  
[https://postgr.es/m/[email protected]](https://postgr.es/m/[email protected])
  
[https://git.postgresql.org/pg/commitdiff/85b4ba73423b480902206ca04330c1cbea371c3c](https://git.postgresql.org/pg/commitdiff/85b4ba73423b480902206ca04330c1cbea371c3c)

- In psql's \d commands, don't truncate attribute default values. Historically,
  psql has truncated the text of a column's default expression at 128
  characters.  This is unlike any other behavior in describe.c, and it's become
  particularly confusing now that the limit is only applied to the expression
  proper and not to the "generated always as (...) stored" text that may get
  wrapped around it.  Excavation in our git history suggests that the original
  motivation for this limit was not really to limit the display width (as I'd
  long supposed), but to make it safe to use a fixed-width output buffer to
  store the result.  That implementation restriction is long gone of course, but
  the limit remained.  Let's just get rid of it.  While here, rearrange the
  logic about when to free the output string so that it's not so dependent on
  unstated assumptions about the possible values of attidentity and
  attgenerated.  Per bug #16743 from David Turon.  Back-patch to v12 where
  GENERATED came in.  (Arguably we could take it back further, but I'm hesitant
  to change the behavior of long-stable branches for this.)  Discussion:
  
[https://postgr.es/m/[email protected]](https://postgr.es/m/[email protected])
  
[https://git.postgresql.org/pg/commitdiff/314fb9baeacb3426a5d9a26132aae8d828cc0ad7](https://git.postgresql.org/pg/commitdiff/314fb9baeacb3426a5d9a26132aae8d828cc0ad7)

- Fix a recently-introduced race condition in LISTEN/NOTIFY handling. Commit
  566372b3d fixed some race conditions involving concurrent SimpleLruTruncate
  calls, but it introduced new ones in async.c. A newly-listening backend could
  attempt to read Notify SLRU pages that were in process of being truncated,
  possibly causing an error.  Also, the QUEUE_TAIL pointer could become set to a
  value that's not equal to the queue position of any backend.  While that's
  fairly harmless in v13 and up (thanks to commit 51004c717), in older branches
  it resulted in near-permanent disabling of the queue truncation logic, so that
  continued use of NOTIFY led to queue-fill warnings and eventual inability to
  send any more notifies.  (A server restart is enough to make that go away, but
  it's still pretty unpleasant.)  The core of the problem is confusion about
  whether QUEUE_TAIL represents the "logical" tail of the queue (i.e., the
  oldest still-interesting data) or the "physical" tail (the oldest data we've
  not yet truncated away).  To fix, split that into two variables. QUEUE_TAIL
  regains its definition as the logical tail, and we introduce a new variable to
  track the oldest un-truncated page.  Per report from Mikael Gustavsson.  Like
  the previous patch, back-patch to all supported branches.  Discussion:
  
[https://postgr.es/m/[email protected]](https://postgr.es/m/[email protected])
  
[https://git.postgresql.org/pg/commitdiff/9c83b54a9ccdb111ce693ada2309475197c19d70](https://git.postgresql.org/pg/commitdiff/9c83b54a9ccdb111ce693ada2309475197c19d70)

- Clean up after tests in src/test/locale/. Oversight in 257836a75, which added
  these tests.
  
[https://git.postgresql.org/pg/commitdiff/b90a7fe15f78b1e2513cbcb27a33f4adc47bcd3d](https://git.postgresql.org/pg/commitdiff/b90a7fe15f78b1e2513cbcb27a33f4adc47bcd3d)

- Doc: clarify behavior of PQconnectdbParams(). The documentation omitted the
  critical tidbit that a keyword-array entry is simply ignored if its
  corresponding value-array entry is NULL or an empty string; it will *not*
  override any previously-obtained value for the parameter.  (See
  conninfo_array_parse().)  I'd supposed that would force the setting back to
  default, which is what led me into bug #16746; but it doesn't.  While here, I
  couldn't resist the temptation to do some copy-editing, both in the
  description of PQconnectdbParams() and in the section about connection URI
  syntax.  Discussion: 
[https://postgr.es/m/[email protected]](https://postgr.es/m/[email protected])
  
[https://git.postgresql.org/pg/commitdiff/d5e2bdf7dda712a60234f08e036ec9de28085a2d](https://git.postgresql.org/pg/commitdiff/d5e2bdf7dda712a60234f08e036ec9de28085a2d)

Heikki Linnakangas pushed:

- Split copy.c into four files. Copy.c has grown really large. Split it into
  more manageable parts:  - copy.c now contains only a few functions that are
  common to COPY FROM   and COPY TO.  - copyto.c contains code for COPY TO.  -
  copyfrom.c contains code for initializing COPY FROM, and inserting the
  tuples to the correct table.  - copyfromparse.c contains code for reading from
  the client/file/program,   and parsing the input text/CSV/binary format into
  tuples.  All of these parts are fairly complicated, and fairly independent of
  each other. There is a patch being discussed to implement parallel COPY FROM,
  which will add a lot of new code to the COPY FROM path, and another patch
  which would allow INSERTs to use the same multi-insert machinery as COPY FROM,
  both of which will require refactoring that code. With those two patches,
  there's going to be a lot of code churn in copy.c anyway, so now seems like a
  good time to do this refactoring.  The CopyStateData struct is also split. All
  the formatting options, like FORMAT, QUOTE, ESCAPE, are put in a new
  CopyFormatOption struct, which is used by both COPY FROM and TO. Other state
  data are kept in separate CopyFromStateData and CopyToStateData structs.
  Reviewed-by: Soumyadeep Chakraborty, Erik Rijkers, Vignesh C, Andres Freund
  Discussion:
  
[https://www.postgresql.org/message-id/8e15b560-f387-7acc-ac90-763986617bfb%40iki.fi](https://www.postgresql.org/message-id/8e15b560-f387-7acc-ac90-763986617bfb%40iki.fi)
  
[https://git.postgresql.org/pg/commitdiff/c532d15dddff14b01fe9ef1d465013cb8ef186df](https://git.postgresql.org/pg/commitdiff/c532d15dddff14b01fe9ef1d465013cb8ef186df)

- Fix a few comments that referred to copy.c. Missed these in the previous
  commit.
  
[https://git.postgresql.org/pg/commitdiff/68b1a4877ef54f5ee6e05c64876655dd13d2c73b](https://git.postgresql.org/pg/commitdiff/68b1a4877ef54f5ee6e05c64876655dd13d2c73b)

- Move per-agg and per-trans duplicate finding to the planner. This has the
  advantage that the cost estimates for aggregates can count the number of calls
  to transition and final functions correctly.  Bump catalog version, because
  views can contain Aggrefs.  Reviewed-by: Andres Freund Discussion:
  
[https://www.postgresql.org/message-id/b2e3536b-1dbc-8303-c97e-89cb0b4a9a48%40iki.fi](https://www.postgresql.org/message-id/b2e3536b-1dbc-8303-c97e-89cb0b4a9a48%40iki.fi)
  
[https://git.postgresql.org/pg/commitdiff/0a2bc5d61e713e3fe72438f020eea5fcc90b0f0b](https://git.postgresql.org/pg/commitdiff/0a2bc5d61e713e3fe72438f020eea5fcc90b0f0b)

- Fix expected output: the order of agg permission checks changed. Commit
  0a2bc5d61e changed the order that permissions on the final and transition
  functions of an aggregate are checked in. That shows up as a difference in the
  order the LOG messages in this sepgsql regression test are printed. Adjust the
  expected output.  Per buildfarm failure in rhinoceros.
  
[https://git.postgresql.org/pg/commitdiff/8818ad5b1557d42cd58e5196fac7084a2389bdad](https://git.postgresql.org/pg/commitdiff/8818ad5b1557d42cd58e5196fac7084a2389bdad)

Álvaro Herrera pushed:

- Make some sanity-check elogs more verbose. A few sanity checks in funcapi.c
  were not mentioning all the possible clauses for failure, confusing developers
  who fat-fingered catalog data additions.  Make the errors more detailed to
  avoid wasting time in pinpointing mistakes.  Per complaint from Craig Ringer.
  Reviewed-by: Tom Lane <[email protected]> Discussion:
  
[https://postgr.es/m/camsr+yh7kd87a3cu5m_wko46hpq46zfv5wesfnl0ywxkghg...@mail.gmail.com](https://postgr.es/m/camsr+yh7kd87a3cu5m_wko46hpq46zfv5wesfnl0ywxkghg...@mail.gmail.com)
  
[https://git.postgresql.org/pg/commitdiff/fe051291550ab88267ce3104e9833925bf757393](https://git.postgresql.org/pg/commitdiff/fe051291550ab88267ce3104e9833925bf757393)

- Don't hold ProcArrayLock longer than needed in rare cases. While cancelling an
  autovacuum worker, we hold ProcArrayLock while formatting a debugging log
  string.  We can make this shorter by saving the data we need to produce the
  message and doing the formatting outside the locked region.  This isn't
  terribly critical, as it only occurs pretty rarely: when a backend runs
  deadlock detection and it happens to be blocked by a autovacuum running
  autovacuum.  Still, there's no need to cause a hiccup in ProcArrayLock
  processing, which can be very high-traffic in some cases.  While at it, rework
  code so that we only print the string when it is really going to be used, as
  suggested by Michael Paquier.  Discussion:
  
[https://postgr.es/m/[email protected]](https://postgr.es/m/[email protected])
 Reviewed-by: Michael
  Paquier <[email protected]>
  
[https://git.postgresql.org/pg/commitdiff/450c8230b1f7eed1e927c44fb710d80502bea1d2](https://git.postgresql.org/pg/commitdiff/450c8230b1f7eed1e927c44fb710d80502bea1d2)

- Avoid spurious waits in concurrent indexing. In the various waiting phases of
  CREATE INDEX CONCURRENTLY (CIC) and REINDEX CONCURRENTLY (RC), we wait for
  other processes to release their snapshots; this is necessary in general for
  correctness.  However, processes doing CIC in other tables cannot possibly
  affect CIC or RC done in "this" table, so we don't need to wait for those.
  This commit adds a flag in MyProc->statusFlags to indicate that the current
  process is doing CIC, so that other processes doing CIC or RC can ignore it
  when waiting.  Note that this logic is only valid if the index does not access
  other tables.  For simplicity we avoid setting the flag if the index has a
  column that's an expression, or has a WHERE predicate.  (It is possible to
  have expressional or partial indexes that do not access other tables, but
  figuring that out would require more work.)  This flag can potentially also be
  used by processes doing REINDEX CONCURRENTLY to be skipped; and by VACUUM to
  ignore processes in CIC or RC for the purposes of computing an Xmin.  That's
  left for future commits.  Author: Álvaro Herrera <[email protected]>
  Author: Dimitry Dolgov <[email protected]> Reviewed-by: Michael Paquier
  <[email protected]> Discussion:
  
[https://postgr.es/m/[email protected]](https://postgr.es/m/[email protected])
  
[https://git.postgresql.org/pg/commitdiff/c98763bf51bf610b3ee7e209fc76c3ff9a6b3163](https://git.postgresql.org/pg/commitdiff/c98763bf51bf610b3ee7e209fc76c3ff9a6b3163)

- Restore lock level to update statusFlags. Reverts 27838981be9d (some comments
  are kept).  Per discussion, it does not seem safe to relax the lock level used
  for this; in order for it to be safe, there would have to be memory barriers
  between the point we set the flag and the point we set the trasaction Xid,
  which perhaps would not be so bad; but there would also have to be barriers at
  the readers' side, which from a performance perspective might be bad.  Now
  maybe this analysis is wrong and it *is* safe for some reason, but proof of
  that is not trivial.  Discussion:
  
[https://postgr.es/m/[email protected]](https://postgr.es/m/[email protected])
  
[https://git.postgresql.org/pg/commitdiff/dcfff74fb16622898a9d1df33e530f477caab095](https://git.postgresql.org/pg/commitdiff/dcfff74fb16622898a9d1df33e530f477caab095)

David Rowley pushed:

- Define pg_attribute_cold and pg_attribute_hot macros. For compilers supporting
  __has_attribute and __has_attribute (hot/cold).  __has_attribute is supported
  on gcc >= 5, clang >= 2.9 and icc >= 17.  A followup commit will implement
  some usages of these macros.  Author: David Rowley Reviewed-by: Andres Freund,
  Peter Eisentraut Discussion:
  
[https://postgr.es/m/CAApHDvrVpasrEzLL2er7p9iwZFZ%3DJj6WisePcFeunwfrV0js_A%40mail.gmail.com](https://postgr.es/m/CAApHDvrVpasrEzLL2er7p9iwZFZ%3DJj6WisePcFeunwfrV0js_A%40mail.gmail.com)
  
[https://git.postgresql.org/pg/commitdiff/697e1d02f53f985992a4f479b0b08fca5c272c6c](https://git.postgresql.org/pg/commitdiff/697e1d02f53f985992a4f479b0b08fca5c272c6c)

- Improve compiler code layout in elog/ereport ERROR calls. Here we use a bit of
  preprocessor trickery to coax supporting compilers into laying out their
  generated code so that the code that's in the same branch as
  elog(ERROR)/ereport(ERROR) calls is moved away from the hot path.
  Effectively, this reduces the size of the hot code meaning that it can sit on
  fewer cache lines.  Performance improvements of between 10-15% have been seen
  on highly CPU bound workloads using pgbench's TPC-b benchmark.  What's
  achieved here is very similar to putting the error condition inside an
  unlikely() macro. For example;  if (unlikely(x < 0))     elog(ERROR, "invalid
  x value");  now there's no need to make use of unlikely() here as the common
  macro used by elog and ereport will now see that elevel is >= ERROR and make
  use of a pg_attribute_cold marked version of errstart().  When elevel < ERROR
  or if it cannot be determined to be constant, the original behavior is
  maintained.  Author: David Rowley Reviewed-by: Andres Freund, Peter Eisentraut
  Discussion:
  
[https://postgr.es/m/CAApHDvrVpasrEzLL2er7p9iwZFZ%3DJj6WisePcFeunwfrV0js_A%40mail.gmail.com](https://postgr.es/m/CAApHDvrVpasrEzLL2er7p9iwZFZ%3DJj6WisePcFeunwfrV0js_A%40mail.gmail.com)
  
[https://git.postgresql.org/pg/commitdiff/913ec71d682e99852cc188a7edbdccd02d42b4b3](https://git.postgresql.org/pg/commitdiff/913ec71d682e99852cc188a7edbdccd02d42b4b3)

- Fix unportable usage of __has_attribute. This should fix the breakages caused
  by 697e1d02f, which seems to break the build for GCC version < 5.  It seems,
  according to the GCC manual that __has_attribute is a "special operator" and
  must be tested without any other conditions in the preprocessor test.  Per
  recommendation from the GCC manual via Greg Nancarrow  Reported-by: Greg
  Nancarrow Discussion:
  
[https://postgr.es/m/cajcof-eusu8fhc10v476o9dqnjqkysvs1_vrms-_fvajpz3...@mail.gmail.com](https://postgr.es/m/cajcof-eusu8fhc10v476o9dqnjqkysvs1_vrms-_fvajpz3...@mail.gmail.com)
  
[https://git.postgresql.org/pg/commitdiff/1fa22a43a56e1fe44c7bb3a3d5ef31be5bcac41d](https://git.postgresql.org/pg/commitdiff/1fa22a43a56e1fe44c7bb3a3d5ef31be5bcac41d)

- Tidy up definitions of pg_attribute_hot and pg_attribute_cold. 1fa22a43a was a
  quick fix for portability problem I introduced in 697e1d02f.  1fa22a43a adds a
  few more cases to the preprocessor logic than I'd have liked.  Andres Freund
  and Dagfinn Ilmari Mannsåker suggested a better way to do this.  In passing,
  also adjust the only current usage of these macros so that the macro comes
  before the function's return type in the declaration of the function.  This
  now matches what the definition of the function does.  Discussion:
  
[https://postgr.es/m/[email protected]](https://postgr.es/m/[email protected])
  Discussion: 
[https://postgr.es/m/[email protected]](https://postgr.es/m/[email protected])
  
[https://git.postgresql.org/pg/commitdiff/b0727ae99b7056ca88e9708c014a86f6e611d938](https://git.postgresql.org/pg/commitdiff/b0727ae99b7056ca88e9708c014a86f6e611d938)

- Stop gap fix for __attribute__((cold)) compiler bug in MinGW 8.1. The
  buildfarm animal walleye, running MinGW 8.1 has been having problems ever
  since 697e1d02f and 913ec71d6 went in.  This appears to be a bug in assembler
  which was fixed in a later version.  For now, in order to get that animal
  running green again, let's just define pg_attribute_cold and pg_attribute_hot
  to be empty macros on that compiler.  Hopefully, we can get the support of the
  owner of the animal to upgrade to a less buggy compiler and revert this at a
  later date.  Discussion: 
[https://postgr.es/m/[email protected]](https://postgr.es/m/[email protected])
  
[https://git.postgresql.org/pg/commitdiff/687f6163447514c23b44a981540987013529a9ec](https://git.postgresql.org/pg/commitdiff/687f6163447514c23b44a981540987013529a9ec)

Michaël Paquier pushed:

- Use macros instead of hardcoded offsets for LWLock initialization. This makes
  the code slightly easier to follow, as the initialization relies on an offset
  that overlapped with an equivalent set of macros defined, which are used in
  other places already.  Author: Japin Li Discussion:
  
[https://postgr.es/m/meyp282mb1669fb410006758402f2c3a2b6...@meyp282mb1669.ausp282.prod.outlook.com](https://postgr.es/m/meyp282mb1669fb410006758402f2c3a2b6...@meyp282mb1669.ausp282.prod.outlook.com)
  
[https://git.postgresql.org/pg/commitdiff/d03d7549b29236e300aceac0c22173cf19acc675](https://git.postgresql.org/pg/commitdiff/d03d7549b29236e300aceac0c22173cf19acc675)

- Remove catalog function currtid(). currtid() and currtid2() are an
  undocumented set of functions whose sole known user is the Postgres ODBC
  driver, able to retrieve the latest TID version for a tuple given by the
  caller of those functions.  As used by Postgres ODBC, currtid() is a shortcut
  able to retrieve the last TID loaded into a backend by passing an OID of 0
  (magic value) after a tuple insertion.  This is removed in this commit, as it
  became obsolete after the driver began using "RETURNING ctid" with inserts, a
  clause supported since Postgres 8.2 (using RETURNING is better for performance
  anyway as it reduces the number of round-trips to the backend).  currtid2() is
  still used by the driver, so this remains around for now. Note that this
  function is kept in its original shape for backward compatibility reasons.
  Per discussion with many people, including Andres Freund, Peter Eisentraut,
  Álvaro Herrera, Hiroshi Inoue, Tom Lane and myself.  Bump catalog version.
  Discussion: 
[https://postgr.es/m/[email protected]](https://postgr.es/m/[email protected])
  
[https://git.postgresql.org/pg/commitdiff/7b94e999606e2e2e10d68d544d49fc5a5d5785ac](https://git.postgresql.org/pg/commitdiff/7b94e999606e2e2e10d68d544d49fc5a5d5785ac)

Fujii Masao pushed:

- doc: Get rid of unnecessary space character from some index items. Previously
  some index items have " ," (i.e., space + comma) in the docs as follows. Since
  the space character before the comma is unnecessary, this commit gets rid of
  that for the sake of consistency with other index items.
  parallel_leader_participation configuration parameter , Other Planner Options
  Author: Fujii Masao Reviewed-by: Euler Taveira Discussion:
  
[https://postgr.es/m/[email protected]](https://postgr.es/m/[email protected])
  
[https://git.postgresql.org/pg/commitdiff/e522024bd8dd28a0f13dcccfd39170698f45c939](https://git.postgresql.org/pg/commitdiff/e522024bd8dd28a0f13dcccfd39170698f45c939)

- doc: Add description about re-analysis and re-planning of a prepared
  statement. A prepared statement is re-analyzed and re-planned whenever
  database objects used in the statement have undergone definitional changes or
  the planner statistics of them have been updated. The former has been
  documented from before, but the latter was not previously. This commit adds
  the description about the latter case into the docs.  Author: Atsushi
  Torikoshi Reviewed-by: Andy Fan, Fujii Masao Discussion:
  
[https://postgr.es/m/[email protected]](https://postgr.es/m/[email protected])
  
[https://git.postgresql.org/pg/commitdiff/4a36eab79a193700b7b65baf6c09c795c90c02c6](https://git.postgresql.org/pg/commitdiff/4a36eab79a193700b7b65baf6c09c795c90c02c6)

- pg_stat_statements: Track number of times pgss entries were deallocated. If
  more distinct statements than pg_stat_statements.max are observed,
  pg_stat_statements entries about the least-executed statements are
  deallocated. This commit enables us to track the total number of times those
  entries were deallocated. That number can be viewed in the
  pg_stat_statements_info view that this commit adds. It's useful when tuning
  pg_stat_statements.max parameter. If it's high, i.e., the entries are
  deallocated very frequently, which might cause the performance regression and
  we can increase pg_stat_statements.max to avoid those frequent deallocations.
  The pg_stat_statements_info view is intended to display the statistics of
  pg_stat_statements module itself. Currently it has only one column "dealloc"
  indicating the number of times entries were deallocated. But an upcoming patch
  will add other columns (for example, the time at which pg_stat_statements
  statistics were last reset) into the view.  Author: Katsuragi Yuta, Yuki Seino
  Reviewed-by: Fujii Masao Discussion:
  
[https://postgr.es/m/[email protected]](https://postgr.es/m/[email protected])
  
[https://git.postgresql.org/pg/commitdiff/9fbc3f318d039c3e1e8614c38e40843cf8fcffde](https://git.postgresql.org/pg/commitdiff/9fbc3f318d039c3e1e8614c38e40843cf8fcffde)

- Use standard SIGHUP and SIGTERM signal handlers in worker_spi. Previously
  worker_spi used its custom signal handlers for SIGHUP and SIGTERM. This commit
  makes worker_spi use the standard signal handlers, to simplify the code.  Note
  that die() is used as the standard SIGTERM signal handler in worker_spi
  instead of SignalHandlerForShutdownRequest() or bgworker_die(). Previously the
  exit handling was only able to exit from within the main loop, and not from
  within the backend code it calls. This is why die() needs to be used here, so
  worker_spi can respond to SIGTERM signal while it's executing a query.  Maybe
  we can say that it's a bug that worker_spi could not respond to SIGTERM during
  query execution. But since worker_spi is a just example of the background
  worker code, we don't do the back-patch.  Thanks to Craig Ringer for the
  report and investigation of the issue.  Author: Bharath Rupireddy Reviewed-by:
  Fujii Masao Discussion:
  
[https://postgr.es/m/calj2acxdezhafotdcqo9cfsrvrflyyonpkrca1ug4uzn9hu...@mail.gmail.com](https://postgr.es/m/calj2acxdezhafotdcqo9cfsrvrflyyonpkrca1ug4uzn9hu...@mail.gmail.com)
  Discussion:
  
[https://postgr.es/m/cagry4nxsae_1k_9g5b47ora0s011ibohsxhfmh7cg7hv0o1...@mail.gmail.com](https://postgr.es/m/cagry4nxsae_1k_9g5b47ora0s011ibohsxhfmh7cg7hv0o1...@mail.gmail.com)
  
[https://git.postgresql.org/pg/commitdiff/2a0847720ae6fa4180bfbe404e4e6bbf2f737708](https://git.postgresql.org/pg/commitdiff/2a0847720ae6fa4180bfbe404e4e6bbf2f737708)

- Use standard SIGTERM signal handler die() in test_shm_mq worker. Previously
  test_shm_mq worker used the stripped-down version of die() as the SIGTERM
  signal handler. This commit makes it use die(), instead, to simplify the code.
  In terms of the code, the difference between die() and the stripped-down
  version previously used is whether the signal handler directly may call
  ProcessInterrupts() or not. But this difference doesn't exist in a background
  worker because, in bgworker, DoingCommandRead flag will never be true and
  die() will never call ProcessInterrupts() directly. Therefore test_shm_mq
  worker can safely use die(), like other bgworker proceses (e.g., logical
  replication apply launcher or autoprewarm worker) currently do.  Thanks to
  Craig Ringer for the report and investigation of the issue.  Author: Bharath
  Rupireddy Reviewed-by: Fujii Masao Discussion:
  
[https://postgr.es/m/cagry4nxsae_1k_9g5b47ora0s011ibohsxhfmh7cg7hv0o1...@mail.gmail.com](https://postgr.es/m/cagry4nxsae_1k_9g5b47ora0s011ibohsxhfmh7cg7hv0o1...@mail.gmail.com)
  
[https://git.postgresql.org/pg/commitdiff/ef848f4ac5a4bd072c65867186268775acfb4298](https://git.postgresql.org/pg/commitdiff/ef848f4ac5a4bd072c65867186268775acfb4298)

- Fix CLUSTER progress reporting of number of blocks scanned. Previously
  pg_stat_progress_cluster view reported the current block number in heap scan
  as the number of heap blocks scanned (i.e., heap_blks_scanned). This reported
  number could be incorrect when synchronize_seqscans is enabled, because it
  allowed the heap scan to start at block in middle. This could result in
  wraparounds in the heap_blks_scanned column when the heap scan wrapped around.
  This commit fixes the bug by calculating the number of blocks from the block
  that the heap scan starts at to the current block in scan, and reporting that
  number in the heap_blks_scanned column.  Also, in pg_stat_progress_cluster
  view, previously heap_blks_scanned could not reach heap_blks_total at the end
  of heap scan phase if the last pages scanned were empty. This commit fixes the
  bug by manually updating heap_blks_scanned to the same value as
  heap_blks_total when the heap scan phase finishes.  Back-patch to v12 where
  pg_stat_progress_cluster view was introduced.  Reported-by: Matthias van de
  Meent Author: Matthias van de Meent Reviewed-by: Fujii Masao Discussion:
  
[https://postgr.es/m/caeze2wjcbwsgkvfyag001rc4+-nnldpwm7qbyd6ypvuhks-...@mail.gmail.com](https://postgr.es/m/caeze2wjcbwsgkvfyag001rc4+-nnldpwm7qbyd6ypvuhks-...@mail.gmail.com)
  
[https://git.postgresql.org/pg/commitdiff/3df51ca8b39f08ef19a77b9776f2547c86b70c49](https://git.postgresql.org/pg/commitdiff/3df51ca8b39f08ef19a77b9776f2547c86b70c49)

Andrew Gierth pushed:

- Properly check index mark/restore in ExecSupportsMarkRestore. Previously this
  code assumed that all IndexScan nodes supported mark/restore, which is not
  true since it depends on optional index AM support functions. This could lead
  to errors about missing support functions in rare edge cases of mergejoins
  with no sort keys, where an unordered non-btree index scan was placed on the
  inner path without a protecting Materialize node. (Normally, the fact that
  merge join requires ordered input would avoid this error.)  Backpatch all the
  way since this bug is ancient.  Per report from Eugen Konkov on irc.
  Discussion: 
[https://postgr.es/m/[email protected]](https://postgr.es/m/[email protected])
  
[https://git.postgresql.org/pg/commitdiff/660b89928d18386de7755565c008439ae75d1218](https://git.postgresql.org/pg/commitdiff/660b89928d18386de7755565c008439ae75d1218)

Amit Kapila pushed:

- Remove obsolete comment atop ri_PlanCheck. Commit 5b7ba75f7f removed the
  unused parameter but forgot to update the nearby comments.  Author: Li Japin
  Backpatch-through: 13, where it was introduced Discussion:
  
[https://postgr.es/m/[email protected]](https://postgr.es/m/[email protected])
  
[https://git.postgresql.org/pg/commitdiff/805b816305b62cb3e2670418ced8f7184a2d29c7](https://git.postgresql.org/pg/commitdiff/805b816305b62cb3e2670418ced8f7184a2d29c7)

- Use Enums for logical replication message types at more places. Commit
  644f0d7cc9 added logical replication message type enums to use instead of
  character literals but some char substitutions were overlooked.  Author: Peter
  Smith Reviewed-by: Amit Kapila Discussion:
  
[https://postgr.es/m/CAHut+PsTG=vrv8hgrvonavcnr21jhqmdpk2n0a1ujpow0p+...@mail.gmail.com](https://postgr.es/m/CAHut+PsTG=vrv8hgrvonavcnr21jhqmdpk2n0a1ujpow0p+...@mail.gmail.com)
  
[https://git.postgresql.org/pg/commitdiff/f3a8f73ec274bf8cc6066ea315f1a5a022214b02](https://git.postgresql.org/pg/commitdiff/f3a8f73ec274bf8cc6066ea315f1a5a022214b02)

- Fix replication of in-progress transactions in tablesync worker. Tablesync
  worker runs under a single transaction but in streaming mode, we were
  committing the transaction on stream_stop, stream_abort, and stream_commit. We
  need to avoid committing the transaction in a streaming mode in tablesync
  worker.  In passing move the call to process_syncing_tables in
  apply_handle_stream_commit after clean up of stream files. This will allow
  clean up of files to happen before the exit of tablesync worker which would
  otherwise be handled by one of the proc exit routines.  Author: Dilip Kumar
  Reviewed-by: Amit Kapila and Peter Smith Tested-by: Peter Smith Discussion:
  
[https://postgr.es/m/CAHut+Pt4PyKQCwqzQ=EFF=bpkkjd7xkt_s23f6l20ayqnxg...@mail.gmail.com](https://postgr.es/m/CAHut+Pt4PyKQCwqzQ=EFF=bpkkjd7xkt_s23f6l20ayqnxg...@mail.gmail.com)
  
[https://git.postgresql.org/pg/commitdiff/0926e96c493443644ba8e96b5d96d013a9ffaf64](https://git.postgresql.org/pg/commitdiff/0926e96c493443644ba8e96b5d96d013a9ffaf64)

Thomas Munro pushed:

- Fix WaitLatch(NULL) on Windows. Further to commit 733fa9aa, on Windows when a
  latch is triggered but we aren't currently waiting for it, we need to locate
  the latch's HANDLE rather than calling ResetEvent(NULL).  Author: Kyotaro
  Horiguchi <[email protected]> Reported-by: Ranier Vilela
  <[email protected]> Discussion:
  
[https://postgr.es/m/CAEudQArTPi1YBc%2Bn1fo0Asy3QBFhVjp_QgyKG-8yksVn%2ByRTiw%40mail.gmail.com](https://postgr.es/m/CAEudQArTPi1YBc%2Bn1fo0Asy3QBFhVjp_QgyKG-8yksVn%2ByRTiw%40mail.gmail.com)
  
[https://git.postgresql.org/pg/commitdiff/a7e65dc88b6f088fc2fcf5a660d866de644b1300](https://git.postgresql.org/pg/commitdiff/a7e65dc88b6f088fc2fcf5a660d866de644b1300)

Peter Eisentraut pushed:

- Make error hint from bind() failure more accurate. The hint "Is another
  postmaster already running ..." should only be printed for errors that are
  really about something else already using the address.  In other cases it is
  misleading.  So only show that hint if errno == EADDRINUSE.  Also, since
  Unix-domain sockets in the file-system namespace never report EADDRINUSE for
  an existing file (they would just overwrite it), the part of the hint saying
  "If not, remove socket file \"%s\" and retry." can never happen, so remove it.
  Unix-domain sockets in the abstract namespace can report EADDRINUSE, but in
  that case there is no file to remove, so the hint doesn't work there either.
  Reviewed-by: Michael Paquier <[email protected]> Discussion:
  
[https://www.postgresql.org/message-id/flat/[email protected]](https://www.postgresql.org/message-id/flat/[email protected])
  
[https://git.postgresql.org/pg/commitdiff/d5d91acdccae6b322a5634be2c66d62fc6b9a43d](https://git.postgresql.org/pg/commitdiff/d5d91acdccae6b322a5634be2c66d62fc6b9a43d)

- Add support for abstract Unix-domain sockets. This is a variant of the normal
  Unix-domain sockets that don't use the file system but a separate "abstract"
  namespace.  At the user interface, such sockets are represented by names
  starting with "@". Supported on Linux and Windows right now.  Reviewed-by:
  Michael Paquier <[email protected]> Discussion:
  
[https://www.postgresql.org/message-id/flat/[email protected]](https://www.postgresql.org/message-id/flat/[email protected])
  
[https://git.postgresql.org/pg/commitdiff/c9f0624bc2f544baacafa38e3797d5323401d039](https://git.postgresql.org/pg/commitdiff/c9f0624bc2f544baacafa38e3797d5323401d039)

- doc: Fix typos. Author: Justin Pryzby <[email protected]> Discussion:
  
[https://www.postgresql.org/message-id/[email protected]](https://www.postgresql.org/message-id/[email protected])
  
[https://git.postgresql.org/pg/commitdiff/2fbd786c3446b1bc90f396d3fa5f4614b0a57d89](https://git.postgresql.org/pg/commitdiff/2fbd786c3446b1bc90f396d3fa5f4614b0a57d89)

- tablefunc: Reject negative number of tuples passed to normal_rand(). The
  function converted the first argument i.e. the number of tuples to return into
  an unsigned integer which turns out to be huge number when a negative value is
  passed.  This causes the function to take much longer time to execute.
  Instead, reject a negative value.  (If someone really wants to generate many
  more result rows, they should consider adding a bigint or numeric variant.)
  While at it, improve SQL test to test the number of tuples returned by this
  function.  Author: Ashutosh Bapat <[email protected]> Discussion:
  
[https://www.postgresql.org/message-id/cag-acpw3puumsnm6cla9rw4bec5cemkjx8gogc8gvqct3cy...@mail.gmail.com](https://www.postgresql.org/message-id/cag-acpw3puumsnm6cla9rw4bec5cemkjx8gogc8gvqct3cy...@mail.gmail.com)
  
[https://git.postgresql.org/pg/commitdiff/f73999262ed6c40d9a7c3d7cccec7143d4d15287](https://git.postgresql.org/pg/commitdiff/f73999262ed6c40d9a7c3d7cccec7143d4d15287)

Noah Misch pushed:

- Retry initial slurp_file("current_logfiles"), in test 004_logrotate.pl.
  Buildfarm member topminnow failed when the test script attempted this before
  the syslogger would have created the file.  Back-patch to v12, which
  introduced the test.
  
[https://git.postgresql.org/pg/commitdiff/0f89ca083bbf71641cf61b4b951d6b30a2fd978b](https://git.postgresql.org/pg/commitdiff/0f89ca083bbf71641cf61b4b951d6b30a2fd978b)

# Pending Patches

Amul Sul sent in another revision of a patch to implement ALTER SYSTEM READ
{ONLY|WRITE}.

Daniel Vérité sent in another revision of a patch to implement batch/pipelining
in libpq.

Justin Pryzby and Tomáš Vondra traded patches to implement extended statistics
on expressions.

Álvaro Herrera sent in another revision of a patch to Avoid errors in brin
summarization, which can happen if an index is reindexed concurrently.

Álvaro Herrera sent in a patch to fix a bug that manifested as a walsender
getting stuck during shutdown and *not* shut down, thus preventing postmaster
from completing the shutdown cycle by checking whether
XLogRecPtrIsInvalid(replicatedPtr) was true.

Zeng Wenjing sent in three more revisions of a patch to implement global
temporary tables.

Bharath Rupireddy sent in two more revisions of a patch to implement
postgres_fdw connection caching - cause remote sessions linger till the local
session exit.

Bharath Rupireddy and Heikki Linnakangas traded patches to make it possible to
use parallel inserts in CREATE TABLE AS, where it's safe to do so.

Tomáš Vondra sent in another revision of a patch to use non-volatile storage as
a WAL buffer.

Takayuki Tsunakawa sent in two more revisions of a patch to add bulk inserts for
foreign tables.

Justin Pryzby sent in another revision of a patch to allow INSERT SELECT to use
a BulkInsertState, make INSERT SELECT use multi_insert, and dynamically switch
to multi-insert mode.

Michaël Paquier sent in another revision of a patch to rework the SHA2 and
crypto hash APIs, switch cryptohash_openssl.c to use EVP, and make pgcrypto use
the in-core resowner facility for EVP.

Justin Pryzby sent in another revision of a patch to allow CLUSTER, VACUUM FULL
and REINDEX to change tablespace on the fly.

Keisuke Kuroda sent in a patch to fix a bug that manifested as huge memory
consumption on partitioned table with FKs by reducing the size of the ri SPI
plan hash.

Konstantin Knizhnik sent in two more revisions of a patch to implement custom
compression for libpq.

Takamichi Osumi sent in another revision of a patch to make it possible to
disable WAL logging to speed up bulk loads.

Nathan Bossart sent in two revisions of a patch to add a FAST option to
CHECKPOINT.

Amit Kapila, Ajin Cherian, and Peter Smith traded patches to implement logical
decoding for two-phase transactions.

David Rowley sent in a patch to define pg_attribute_cold and pg_attribute_hot to
be empty macros on minGW 8.1 so as to avoid a bug in that toolchain.

Li Japin sent in another revision of a patch to allow terminating the idle
sessions via a new GUC, idle_session_timeout, and call setitimer() less often.

Euler Taveira de Oliveira sent in a patch to add logical decoding messages to
pgoutput, add xid to messages when streaming, explain why
LOGICAL_REP_MSG_MESSAGE is ignored, simplify the parse_output_parameters
function to take a whole PGOutputData instead of bits and pieces, adjust
in_streaming for messages, and overhaul the tests to take account for all this.

Peter Eisentraut sent in another revision of a patch to add a
result_format_auto_binary_types setting.

Michaël Paquier sent in another revision of a patch to fix a problem that
manifested as vac_update_datfrozenxid will raise "wrong tuple length" if
pg_database tuple contains toast attribute.

Kyotaro HORIGUCHI sent in another revision of a patch to fix handling of NaN in
the geometry types.

Masahiko Sawada sent in another revision of a patch to enable two-phase commit
for multiple foreign servers.

Daniel Gustafsson sent in another revision of a patch to make it possible to
enable and disable data checksums online.

Alexander Korotkov sent in a patch to implement a built-in infrastructure for
reproduction of concurrency issues in automated test suites. Central to this
infrastructure are "stop events," which which are special places in the code,
where the execution could be stopped on some condition.

Peter Eisentraut sent in another revision of a patch to implement SEARCH and
CYCLE clauses in common table expressions per the SQL standard.

Thomas Munro sent in another revision of a patch to get latches to send fewer
signals, use SIGURG rather than SIGUSR1 for latches, use signalfd for epoll
latches, and use EVFILT_SIGNAL for kqueue latches.

Tom Lane sent in another revision of a patch to report GUC changes at query end.

Peter Smith sent in a patch to use enums for message types.

David Zhang sent in three revisions of a patch to add table access method as an
option to pgbench.

Anastasia Lubennikova sent in a patch to handle negative number of tuples passed
to normal_rand().

Peter Eisentraut sent in a patch to pageinspect to change the block number
arguments to bigint.

Bertrand Drouvot sent in four more revisions of a patch to make it possible to
log the standby recovery conflict waits via a new GUC,
log_recovery_conflict_waits.

Kasahara Tatsuhito sent in three more revisions of a patch to fix a bug that
manifested as an autovacuum issue with large numbers of tables.

Masahiko Sawada sent in another revision of a patch to add basic statistics to
the pg_stat_wal view.

Takamichi Osumi sent in a patch to prevent a scenario that archive recovery hits
WALs which come from wal_level=minimal and the server continues to work, which
condition could cause data not to be replicated.

Euler Taveira de Oliveira sent in a patch to remove temporary files after a
backend crash in order to avert ENOSPC conditions that could result from
multiple crashes.

Pavel Borisov sent in another revision of a patch to implement covering indexes
using the SP-GiST index access method.

Kirk Jamison sent in another revision of a patch to prevent invalidating blocks
in smgrextend() during recovery, add a bool parameter in smgrnblocks() for
cached blocks, slim down DropRelFileNodeBuffers() during recovery by avoiding
scanning the whole buffer pool when the relation is small enough or the the
total number of blocks to be invalidated is below the threshold of full
scanning, and getting DropRelFileNodesAllBuffers() to skip the time-consuming
scan of the whole buffer pool during recovery when the relation is small enough,
or when the number of blocks to be invalidated is below the full scan threshold.

Krunal Bauskar and Alexander Korotkov traded patches to improve the spinlock
implementation on ARM.

Arne Roland sent in three revisions of a patch to ensure that renaming a trigger
on a partitioned table also renames triggers on the partitions.

Bharath Rupireddy sent in a patch to fix the error message for pg_workers
shutting down so it talks about background workers instead of the non-existent
connections that apply to other cases.

Stephen Frost sent in another revision of a patch to add GSS information to the
connection authorized log message, if needed.

Michael Banck sent in a patch to clarify the fact that CREATEROLE roles can
GRANT default roles.

Ashutosh Bapat and Alexander Korotkov traded patches to make it easy to print
LSNs.

Andreas Karlsson sent in a PoC patch to fix the fact that the inet/cidr support
shipped broken by throwing away netmask information in the btree_gist supplied
extension.

Pavel Stěhule and Justin Pryzby traded patches to make it possible to read the
tables to be dumped by pg_dump from a file.

Justin Pryzby sent in another revision of a patch to make CLUSTER ON a separate
dump object in pg_dump, implement CLUSTER for partitioned tables, propagate
changes to indisclustered to child/parents, invalidate parent indexes,
invalidate parent index cluster on attach, and preserve indisclustered on
children of clustered, partitioned indexes.

Simon Riggs sent in another revision of a patch to add a FAST_FREEZE option to
VACUUM.

Simon Riggs sent in a patch to implement one_freeze then max_freeze for lazy
VACUUM.

Justin Pryzby sent in another revision of a patch to make pg_ls_* show
directories and shared filesets.

Justin Pryzby sent in another revision of a patch to remove references to
pg_dump's pre-8.1 switch behaviour.

Justin Pryzby sent in another revision of a patch to allow CREATE INDEX
CONCURRENTLY on partitioned tables, add a SKIPVALID flag for more integration,
and make ReindexPartitions() set indisvalid.

Paul A Jungwirth sent in two more revisions of a patch to implement multiranges.

Dean Rasheed sent in another revision of a patch to improve estimation of OR
clauses.

James Coleman sent in a patch to error if gather merge paths aren't sufficiently
sorted.

James Coleman sent in another revision of a patch to ensure that
generate_useful_gather_paths doesn't skip unsorted subpaths, enforce parallel
safety of pathkeys in generate_useful_gather_paths, disallow SRFs in proactive
sort, remove the volatile expr target search on the grounds that it's not needed
then, and document find_em_expr_usable_for_sorting_rel in
prepare_sort_from_pathkeys.

Reply via email to