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

Поиск
Список
Период
Сортировка
От David Fetter
Тема == PostgreSQL Weekly News - January 26, 2020 ==
Дата
Msg-id 20200126154501.GA16307@fetter.org
обсуждение исходный текст
Список 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@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:

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




В списке pgsql-announce по дате отправления:

Предыдущее
От: Gilles Darold
Дата:
Сообщение: pgFormatter v4.2 released
Следующее
От: Paul Ramsey
Дата:
Сообщение: FOSS4G 2020, Calgary, Canada - Call for Papers Open