1. 12 May, 2021 10 commits
    • Tom Lane's avatar
      Double-space commands in system_constraints.sql/system_functions.sql. · 7dde9872
      Tom Lane authored
      Previously, any error reported by the backend while reading
      system_constraints.sql would report the entire file, not just the
      particular command it was working on.  (Ask me how I know.)  Likewise,
      there were chunks of system_functions.sql that would be read as one
      command, which would be annoying if anything failed there.
      
      The issue for system_constraints.sql is an oversight in commit
      dfb75e47.  I didn't try to trace down where the poor formatting
      in system_functions.sql started, but it's certainly contrary to
      the advice at the head of that file.
      7dde9872
    • Tom Lane's avatar
      Doc: update bki.sgml's statements about OID ranges. · 1f9b0e69
      Tom Lane authored
      Commit ab596105 neglected to make the docs match the code.
      1f9b0e69
    • Tom Lane's avatar
      Do pre-release housekeeping on catalog data. · 14472442
      Tom Lane authored
      Run renumber_oids.pl to move high-numbered OIDs down, as per pre-beta
      tasks specified by RELEASE_CHANGES.  For reference, the command was
      ./renumber_oids.pl --first-mapped-oid 8000 --target-oid 6150
      14472442
    • Tom Lane's avatar
      Initial pgindent and pgperltidy run for v14. · def5b065
      Tom Lane authored
      Also "make reformat-dat-files".
      
      The only change worthy of note is that pgindent messed up the formatting
      of launcher.c's struct LogicalRepWorkerId, which led me to notice that
      that struct wasn't used at all anymore, so I just took it out.
      def5b065
    • Michael Paquier's avatar
      Simplify one use of ScanKey in pg_subscription.c · e6ccd1ce
      Michael Paquier authored
      The section of the code in charge of returning all the relations
      associated to a subscription only need one ScanKey, but allocated two of
      them.  This code was introduced as a copy-paste from a different area on
      the same file by 7c4f5240, making the result confusing to follow.
      
      Author: Peter Smith
      Reviewed-by: Tom Lane, Julien Rouhaud, Bharath Rupireddy
      Discussion: https://postgr.es/m/CAHut+PsLKe+rN3FjchoJsd76rx2aMsFTB7CTFxRgUP05p=kcpQ@mail.gmail.com
      e6ccd1ce
    • Peter Eisentraut's avatar
      ec6e70c7
    • Etsuro Fujita's avatar
      Fix EXPLAIN ANALYZE for async-capable nodes. · a363bc6d
      Etsuro Fujita authored
      EXPLAIN ANALYZE for an async-capable ForeignScan node associated with
      postgres_fdw is done just by using instrumentation for ExecProcNode()
      called from the node's callbacks, causing the following problems:
      
      1) If the remote table to scan is empty, the node is incorrectly
         considered as "never executed" by the command even if the node is
         executed, as ExecProcNode() isn't called from the node's callbacks at
         all in that case.
      2) The command fails to collect timings for things other than
         ExecProcNode() done in the node, such as creating a cursor for the
         node's remote query.
      
      To fix these problems, add instrumentation for async-capable nodes, and
      modify postgres_fdw accordingly.
      
      My oversight in commit 27e1f145.
      
      While at it, update a comment for the AsyncRequest struct in execnodes.h
      and the documentation for the ForeignAsyncRequest API in fdwhandler.sgml
      to match the code in ExecAsyncAppendResponse() in nodeAppend.c, and fix
      typos in comments in nodeAppend.c.
      
      Per report from Andrey Lepikhov, though I didn't use his patch.
      
      Reviewed-by: Andrey Lepikhov
      Discussion: https://postgr.es/m/2eb662bb-105d-fc20-7412-2f027cc3ca72%40postgrespro.ru
      a363bc6d
    • Tom Lane's avatar
      Reduce runtime of privileges.sql test under CLOBBER_CACHE_ALWAYS. · e135743e
      Tom Lane authored
      Several queries in the privileges regression test cause the planner
      to apply the plpgsql function "leak()" to every element of the
      histogram for atest12.b.  Since commit 0c882e52 increased the size
      of that histogram to 10000 entries, the test invokes that function
      over 100000 times, which takes an absolutely unreasonable amount of
      time in clobber-cache-always mode.
      
      However, there's no real reason why that has to be a plpgsql
      function: for the purposes of this test, all that matters is that
      it not be marked leakproof.  So we can replace the plpgsql
      implementation with a direct call of int4lt, which has the same
      behavior and is orders of magnitude faster.  This is expected to
      cut several hours off the buildfarm cycle time for CCA animals.
      It has some positive impact in normal builds too, though that's
      probably lost in the noise.
      
      Back-patch to v13 where 0c882e52 came in.
      
      Discussion: https://postgr.es/m/575884.1620626638@sss.pgh.pa.us
      e135743e
    • Fujii Masao's avatar
      Change data type of counters in BufferUsage and WalUsage from long to int64. · d780d7c0
      Fujii Masao authored
      Previously long was used as the data type for some counters in BufferUsage
      and WalUsage. But long is only four byte, e.g., on Windows, and it's entirely
      possible to wrap a four byte counter. For example, emitting more than
      four billion WAL records in one transaction isn't actually particularly rare.
      
      To avoid the overflows of those counters, this commit changes the data type
      of them from long to int64.
      
      Suggested-by: Andres Freund
      Author: Masahiro Ikeda
      Reviewed-by: Fujii Masao
      Discussion: https://postgr.es/m/20201221211650.k7b53tcnadrciqjo@alap3.anarazel.de
      Discussion: https://postgr.es/m/af0964ac-7080-1984-dc23-513754987716@oss.nttdata.com
      d780d7c0
    • Andrew Dunstan's avatar
      Tweak generation of Gen_dummy_probes.pl · 0bf62931
      Andrew Dunstan authored
      Use a static prolog file instead of generating the prolog from the
      existing perl script. Also, support generation of the file in a vpath
      build.
      
      Discussion: https://postgr.es/m/700620.1620662868@sss.pgh.pa.us
      0bf62931
  2. 11 May, 2021 8 commits
  3. 10 May, 2021 11 commits
    • Tom Lane's avatar
      Fix mishandling of resjunk columns in ON CONFLICT ... UPDATE tlists. · 049e1e2e
      Tom Lane authored
      It's unusual to have any resjunk columns in an ON CONFLICT ... UPDATE
      list, but it can happen when MULTIEXPR_SUBLINK SubPlans are present.
      If it happens, the ON CONFLICT UPDATE code path would end up storing
      tuples that include the values of the extra resjunk columns.  That's
      fairly harmless in the short run, but if new columns are added to
      the table then the values would become accessible, possibly leading
      to malfunctions if they don't match the datatypes of the new columns.
      
      This had escaped notice through a confluence of missing sanity checks,
      including
      
      * There's no cross-check that a tuple presented to heap_insert or
      heap_update matches the table rowtype.  While it's difficult to
      check that fully at reasonable cost, we can easily add assertions
      that there aren't too many columns.
      
      * The output-column-assignment cases in execExprInterp.c lacked
      any sanity checks on the output column numbers, which seems like
      an oversight considering there are plenty of assertion checks on
      input column numbers.  Add assertions there too.
      
      * We failed to apply nodeModifyTable's ExecCheckPlanOutput() to
      the ON CONFLICT UPDATE tlist.  That wouldn't have caught this
      specific error, since that function is chartered to ignore resjunk
      columns; but it sure seems like a bad omission now that we've seen
      this bug.
      
      In HEAD, the right way to fix this is to make the processing of
      ON CONFLICT UPDATE tlists work the same as regular UPDATE tlists
      now do, that is don't add "SET x = x" entries, and use
      ExecBuildUpdateProjection to evaluate the tlist and combine it with
      old values of the not-set columns.  This adds a little complication
      to ExecBuildUpdateProjection, but allows removal of a comparable
      amount of now-dead code from the planner.
      
      In the back branches, the most expedient solution seems to be to
      (a) use an output slot for the ON CONFLICT UPDATE projection that
      actually matches the target table, and then (b) invent a variant of
      ExecBuildProjectionInfo that can be told to not store values resulting
      from resjunk columns, so it doesn't try to store into nonexistent
      columns of the output slot.  (We can't simply ignore the resjunk columns
      altogether; they have to be evaluated for MULTIEXPR_SUBLINK to work.)
      This works back to v10.  In 9.6, projections work much differently and
      we can't cheaply give them such an option.  The 9.6 version of this
      patch works by inserting a JunkFilter when it's necessary to get rid
      of resjunk columns.
      
      In addition, v11 and up have the reverse problem when trying to
      perform ON CONFLICT UPDATE on a partitioned table.  Through a
      further oversight, adjust_partition_tlist() discarded resjunk columns
      when re-ordering the ON CONFLICT UPDATE tlist to match a partition.
      This accidentally prevented the storing-bogus-tuples problem, but
      at the cost that MULTIEXPR_SUBLINK cases didn't work, typically
      crashing if more than one row has to be updated.  Fix by preserving
      resjunk columns in that routine.  (I failed to resist the temptation
      to add more assertions there too, and to do some minor code
      beautification.)
      
      Per report from Andres Freund.  Back-patch to all supported branches.
      
      Security: CVE-2021-32028
      049e1e2e
    • Tom Lane's avatar
      Prevent integer overflows in array subscripting calculations. · f02b9085
      Tom Lane authored
      While we were (mostly) careful about ensuring that the dimensions of
      arrays aren't large enough to cause integer overflow, the lower bound
      values were generally not checked.  This allows situations where
      lower_bound + dimension overflows an integer.  It seems that that's
      harmless so far as array reading is concerned, except that array
      elements with subscripts notionally exceeding INT_MAX are inaccessible.
      However, it confuses various array-assignment logic, resulting in a
      potential for memory stomps.
      
      Fix by adding checks that array lower bounds aren't large enough to
      cause lower_bound + dimension to overflow.  (Note: this results in
      disallowing cases where the last subscript position would be exactly
      INT_MAX.  In principle we could probably allow that, but there's a lot
      of code that computes lower_bound + dimension and would need adjustment.
      It seems doubtful that it's worth the trouble/risk to allow it.)
      
      Somewhat independently of that, array_set_element() was careless
      about possible overflow when checking the subscript of a fixed-length
      array, creating a different route to memory stomps.  Fix that too.
      
      Security: CVE-2021-32027
      f02b9085
    • Peter Eisentraut's avatar
      Translation updates · 6206454b
      Peter Eisentraut authored
      Source-Git-URL: git://git.postgresql.org/git/pgtranslation/messages.git
      Source-Git-Hash: 1c361d3ac016b61715d99f2055dee050397e3f13
      6206454b
    • Peter Eisentraut's avatar
      Emit dummy statements for probes.d probes when disabled · fa8fbadb
      Peter Eisentraut authored
      When building without --enable-dtrace, emit dummy
      
          do {} while (0)
      
      statements for the stubbed-out TRACE_POSTGRESQL_foo() macros
      instead of empty macros that totally elide the original probe
      statement.
      
      This fixes the
      
          warning: suggest braces around empty body in an ‘if’ statement [-Wempty-body]
      
      introduced by b94409a0.
      
      Author: Craig Ringer <craig.ringer@2ndquadrant.com>
      Discussion: https://www.postgresql.org/message-id/flat/20210504221531.cfvpmmdfsou6eitb%40alap3.anarazel.de
      fa8fbadb
    • Peter Eisentraut's avatar
      Remove unused function arguments · 3c554100
      Peter Eisentraut authored
      Was present in original commit
      198b3716 but apparently never used.
      3c554100
    • Michael Paquier's avatar
      Fix typos in operatorcmds.c · 829daab4
      Michael Paquier authored
      Author: Kyotaro Horiguchi, Justin Pryzby
      Discussion: https://postgr.es/m/20210428.173633.1525059946206239295.horikyota.ntt@gmail.com
      829daab4
    • Bruce Momjian's avatar
      dc026086
    • Michael Paquier's avatar
      Fix generation of ./INSTALL for the distribution tarball · 45aa88fe
      Michael Paquier authored
      "make dist", in charge of creating a distribution tarball, failed when
      attempting to generate ./INSTALL as a new reference added to
      guc-default-toast-compression on the documentation for the installation
      details was not getting translated properly to plain text.  Like all the
      other link references on this page, this adds a new entry to
      standalone-profile.xsl to allow the generation of ./INSTALL to finish
      properly.
      
      Oversight in 02a93e7e, per buildfarm member guaibasaurus.
      45aa88fe
    • Thomas Munro's avatar
      Revert recovery prefetching feature. · c2dc1934
      Thomas Munro authored
      This set of commits has some bugs with known fixes, but at this late
      stage in the release cycle it seems best to revert and resubmit next
      time, along with some new automated test coverage for this whole area.
      
      Commits reverted:
      
      dc88460c: Doc: Review for "Optionally prefetch referenced data in recovery."
      1d257577: Optionally prefetch referenced data in recovery.
      f003d9f8: Add circular WAL decoding buffer.
      323cbe7c: Remove read_page callback from XLogReader.
      
      Remove the new GUC group WAL_RECOVERY recently added by a55a9847, as the
      corresponding section of config.sgml is now reverted.
      
      Discussion: https://postgr.es/m/CAOuzzgrn7iKnFRsB4MHp3UisEQAGgZMbk_ViTN4HV4-Ksq8zCg%40mail.gmail.com
      c2dc1934
    • Michael Paquier's avatar
      Add more TAP tests for pg_dump with attribute compression · 63db0ac3
      Michael Paquier authored
      Some relations with LZ4 used as the toast compression methods have been
      left around in the main regression test suite to stress pg_upgrade, but
      pg_dump, that includes tests much more picky in terms of output
      generated, had no actual coverage with this feature.
      
      Similarly to collations, tests only working with LZ4 are tracked with an
      additional flag, and this uses TestLib::check_pg_config() to check if
      the build supports LZ4 or not.  This stresses more scenarios with
      tables, materialized views and pg_dump --no-toast-compression.
      
      Author: Dilip Kumar
      Reviewed-by: Michael Paquier
      Discussion: https://postgr.es/m/CAFiTN-twgPmohG7qj1HXhySq16h123y5OowsQR+5h1YeZE9fmQ@mail.gmail.com
      63db0ac3
    • Michael Paquier's avatar
      doc: Fix some gaps with the documentation related to LZ4 · 02a93e7e
      Michael Paquier authored
      The upstream project is officially named "LZ4", and the documentation
      was confused with the option value that can be used with DDLs supporting
      this option, and the project name.
      
      Documentation related to the configure option --with-lz4 was missing, so
      add something for that.
      
      Author: Dilip Kumar, Michael Paquier
      Reviewed-by: Justin Pryzby
      Discussion: https://postgr.es/m/YJaOZQDXBVySq+Cc@paquier.xyz
      02a93e7e
  4. 09 May, 2021 1 commit
  5. 08 May, 2021 4 commits
    • David Rowley's avatar
      Move memory accounting Asserts for Result Cache code · 92c4c269
      David Rowley authored
      In 9eacee2e, I included some code to verify the cache's memory tracking
      is correct by counting up the number of entries and the memory they use
      each time we evict something from the cache.  Those values are then
      compared to the expected values using Assert.  The problem is that this
      requires looping over the entire cache hash table each time we evict an
      entry from the cache.  That can be pretty expensive, as noted by Pavel
      Stehule.
      
      Here we move this memory accounting checking code so that we only verify
      it on cassert builds once when shutting down the Result Cache node.
      
      Aside from the performance increase, this has two distinct advantages:
      
      1) We do the memory checks at the last possible moment before destroying
         the cache.  This means we'll now catch accounting problems that might
         sneak in after a cache eviction.
      
      2) We now do the memory Assert checks when there were no cache evictions.
         This increases the coverage.
      
      One small disadvantage is that we'll now miss any memory tracking issues
      that somehow managed to resolve themselves by the end of execution.
      However, it seems to me that such a memory tracking problem would be quite
      unlikely, and likely somewhat less harmful if one were to exist.
      
      In passing, adjust the loop over the hash table to use the standard
      simplehash.h method of iteration.
      
      Reported-by: Pavel Stehule
      Discussion: https://postgr.es/m/CAFj8pRAzgoSkdEiqrKbT=7yG9FA5fjUAP3jmJywuDqYq6Ki5ug@mail.gmail.com
      92c4c269
    • Tom Lane's avatar
      Sync guc.c and postgresql.conf.sample with the SGML docs. · a55a9847
      Tom Lane authored
      It seems that various people have moved GUCs around in the config.sgml
      listing without bothering to make the code agree.  Ensure that the
      config_group codes assigned to GUCs match where they are listed in
      config.sgml.  Likewise ensure that postgresql.conf.sample lists GUCs
      in the same sub-section and same ordering as they appear in config.sgml.
      
      (I've got some doubts about some of these choices, but for the purposes
      of this patch, we'll treat config.sgml as gospel.)
      
      Notably, this requires adding a WAL_RECOVERY config_group value,
      because 1d257577 didn't.  As long as we're renumbering that enum
      anyway, let's take out the values corresponding to major groups
      that are divided into sub-groups.  No GUC should be assigned to the
      major group itself, so those values just create a temptation to
      do the wrong thing, while adding work for translators.
      
      In passing, adjust the short_desc strings for PRESET_OPTIONS GUCs
      to uniformly use the phrasing "Shows XYZ.", removing the impression
      some of these strings left that you can set the value.
      
      While some of these errors are old, no back-patch, as changing the
      contents of the pg_settings view in stable branches seems more likely
      to be seen as a compatibility break than anything helpful.
      
      Bharath Rupireddy, Justin Pryzby, Tom Lane
      
      Discussion: https://postgr.es/m/16997-ff16127f6e0d1390@postgresql.org
      Discussion: https://postgr.es/m/20210413123139.GE6091@telsasoft.com
      a55a9847
    • Tom Lane's avatar
      Doc: copy-editing for debug_invalidate_system_caches_always description. · f9b809e7
      Tom Lane authored
      I came to fix "useful only useful", but the more I looked at the text
      the more things I thought could be improved.
      f9b809e7
    • Michael Paquier's avatar
      Fix incorrect error code for CREATE/ALTER TABLE COMPRESSION · 9681f216
      Michael Paquier authored
      Specifying an incorrect value for the compression method of an attribute
      caused ERRCODE_FEATURE_NOT_SUPPORTED to be raised as error.  Use instead
      ERRCODE_INVALID_PARAMETER_VALUE to be more consistent.
      
      Author: Dilip Kumar
      Discussion: https://postgr.es/m/CAFiTN-vH84fE-8C4zGZw4v0Wyh4Y2v=5JWg2fGE5+LPaDvz1GQ@mail.gmail.com
      9681f216
  6. 07 May, 2021 6 commits