1. 10 Jan, 2022 2 commits
  2. 08 Jan, 2022 3 commits
    • Tom Lane's avatar
      Fix results of index-only scans on btree_gist char(N) indexes. · 043c1e1a
      Tom Lane authored
      If contrib/btree_gist is used to make a GIST index on a char(N)
      (bpchar) column, and that column is retrieved via an index-only
      scan, what came out had all trailing spaces removed.  Since
      that doesn't happen in any other kind of table scan, this is
      clearly a bug.  The cause is that gbt_bpchar_compress() strips
      trailing spaces (using rtrim1) before a new index entry is made.
      That was probably a good idea when this code was first written,
      but since we invented index-only scans, it's not so good.
      
      One answer could be to mark this opclass as incapable of index-only
      scans.  But to do so, we'd need an extension module version bump,
      followed by manual action by DBAs to install the updated version
      of btree_gist.  And it's not really a desirable place to end up,
      anyway.
      
      Instead, let's fix the code by removing the unwanted space-stripping
      action and adjusting the opclass's comparison logic to ignore
      trailing spaces as bpchar normally does.  This will not hinder
      cases that work today, since index searches with this logic will
      act the same whether trailing spaces are stored or not.  It will
      not by itself fix the problem of getting space-stripped results
      from index-only scans, of course.  Users who care about that can
      REINDEX affected indexes after installing this update, to immediately
      replace all improperly-truncated index entries.  Otherwise, it can
      be expected that the index's behavior will change incrementally as
      old entries are replaced by new ones.
      
      Per report from Alexander Lakhin.  Back-patch to all supported branches.
      
      Discussion: https://postgr.es/m/696c995b-b37f-5526-f45d-04abe713179f@gmail.com
      043c1e1a
    • Michael Paquier's avatar
      Fix issues with describe queries of extended statistics in psql · f5bea836
      Michael Paquier authored
      This addresses some problems in the describe queries used for extended
      statistics:
      - Two schema qualifications for the text type were missing for \dX.
      - The list of extended statistics listed for a table through \d was
      ordered based on the object OIDs, but it is more consistent with the
      other commands to order by namespace and then by object name.
      - A couple of aliases were not used in \d.  These are removed.
      
      This is similar to commits 1f092a3 and 07f8a9e.
      
      Author: Justin Pryzby
      Discussion: https://postgr.es/m/20220107022235.GA14051@telsasoft.com
      Backpatch-through: 14
      f5bea836
    • Bruce Momjian's avatar
      Update copyright for 2022 · 61c8da50
      Bruce Momjian authored
      Backpatch-through: 10
      61c8da50
  3. 07 Jan, 2022 1 commit
  4. 06 Jan, 2022 2 commits
  5. 05 Jan, 2022 1 commit
    • Michael Paquier's avatar
      Reduce relcache access in WAL sender streaming logical changes · 5ddfebde
      Michael Paquier authored
      get_rel_sync_entry(), which is called each time a change needs to be
      logically replicated, is a rather hot code path in the WAL sender
      sending logical changes.  This code path was doing a relcache access on
      relkind and relpartition for each logical change, but we only need to
      know this information when building or re-building the cached
      information for a relation.
      
      Some measurements prove that this is noticeable in perf profiles,
      particularly when attempting to replicate changes from relations that
      are not published as these cause less overhead in the WAL sender,
      delaying further the replication of changes for relations that are
      published.
      
      Issue introduced in 83fd4532.
      
      Author: Hou Zhijie
      Reviewed-by: Kyotaro Horiguchi, Euler Taveira
      Discussion: https://postgr.es/m/OS0PR01MB5716E863AA9E591C1F010F7A947D9@OS0PR01MB5716.jpnprd01.prod.outlook.com
      Backpatch-through: 13
      5ddfebde
  6. 04 Jan, 2022 2 commits
  7. 03 Jan, 2022 2 commits
    • Tom Lane's avatar
      Fix index-only scan plans, take 2. · d228af79
      Tom Lane authored
      Commit 4ace45677 failed to fix the problem fully, because the
      same issue of attempting to fetch a non-returnable index column
      can occur when rechecking the indexqual after using a lossy index
      operator.  Moreover, it broke EXPLAIN for such indexquals (which
      indicates a gap in our test cases :-().
      
      Revert the code changes of 4ace45677 in favor of adding a new field
      to struct IndexOnlyScan, containing a version of the indexqual that
      can be executed against the index-returned tuple without using any
      non-returnable columns.  (The restrictions imposed by check_index_only
      guarantee this is possible, although we may have to recompute indexed
      expressions.)  Support construction of that during setrefs.c
      processing by marking IndexOnlyScan.indextlist entries as resjunk
      if they can't be returned, rather than removing them entirely.
      (We could alternatively require setrefs.c to look up the IndexOptInfo
      again, but abusing resjunk this way seems like a reasonably safe way
      to avoid needing to do that.)
      
      This solution isn't great from an API-stability standpoint: if there
      are any extensions out there that build IndexOnlyScan structs directly,
      they'll be broken in the next minor releases.  However, only a very
      invasive extension would be likely to do such a thing.  There's no
      change in the Path representation, so typical planner extensions
      shouldn't have a problem.
      
      As before, back-patch to all supported branches.
      
      Discussion: https://postgr.es/m/3179992.1641150853@sss.pgh.pa.us
      Discussion: https://postgr.es/m/17350-b5bdcf476e5badbb@postgresql.org
      d228af79
    • Michael Paquier's avatar
      pg_stat_statements: Remove obsolete comment · 52d50261
      Michael Paquier authored
      Since 4f0b0966, pgss_store() does nothing if compute_query_id is disabled
      or if no other module computed a query identifier, but the top comment
      of this function did not reflect that.  This behavior is already
      documented in its own code path, and this just removes the inconsistent
      comment.
      
      Author: Kyotaro Horiguchi
      Reviewed-by: Julien Rouhaud
      Discussion: https://postgr.es/m/20211122.153823.1325120762360533122.horikyota.ntt@gmail.com
      Backpatch-through: 14
      52d50261
  8. 02 Jan, 2022 1 commit
  9. 01 Jan, 2022 1 commit
    • Tom Lane's avatar
      Fix index-only scan plans when not all index columns can be returned. · cabea571
      Tom Lane authored
      If an index has both returnable and non-returnable columns, and one of
      the non-returnable columns is an expression using a Var that is in a
      returnable column, then a query returning that expression could result
      in an index-only scan plan that attempts to read the non-returnable
      column, instead of recomputing the expression from the returnable
      column as intended.
      
      To fix, redefine the "indextlist" list of an IndexOnlyScan plan node
      as containing null Consts in place of any non-returnable columns.
      This solves the problem by preventing setrefs.c from falsely matching
      to such entries.  The executor is happy since it only cares about the
      exposed types of the entries, and ruleutils.c doesn't care because a
      correct plan won't reference those entries.  I considered some other
      ways to prevent setrefs.c from doing the wrong thing, but this way
      seems good since (a) it allows a very localized fix, (b) it makes
      the indextlist structure more compact in many cases, and (c) the
      indextlist is now a more faithful representation of what the index AM
      will actually produce, viz. nulls for any non-returnable columns.
      
      This is easier to hit since we introduced included columns, but it's
      possible to construct failing examples without that, as per the
      added regression test.  Hence, back-patch to all supported branches.
      
      Per bug #17350 from Louis Jachiet.
      
      Discussion: https://postgr.es/m/17350-b5bdcf476e5badbb@postgresql.org
      cabea571
  10. 30 Dec, 2021 2 commits
  11. 22 Dec, 2021 3 commits
  12. 16 Dec, 2021 1 commit
    • Tom Lane's avatar
      Ensure casting to typmod -1 generates a RelabelType. · f9a8bc9f
      Tom Lane authored
      Fix the code changed by commit 5c056b0c2 so that we always generate
      RelabelType, not something else, for a cast to unspecified typmod.
      Otherwise planner optimizations might not happen.
      
      It appears we missed this point because the previous experiments were
      done on type numeric: the parser undesirably generates a call on the
      numeric() length-coercion function, but then numeric_support()
      optimizes that down to a RelabelType, so that everything seems fine.
      It misbehaves for types that have a non-optimized length coercion
      function, such as bpchar.
      
      Per report from John Naylor.  Back-patch to all supported branches,
      as the previous patch eventually was.  Unfortunately, that no longer
      includes 9.6 ... we really shouldn't put this type of change into a
      nearly-EOL branch.
      
      Discussion: https://postgr.es/m/CAFBsxsEfbFHEkouc+FSj+3K1sHipLPbEC67L0SAe-9-da8QtYg@mail.gmail.com
      f9a8bc9f
  13. 15 Dec, 2021 1 commit
    • Michael Paquier's avatar
      Adjust behavior of some env settings for the TAP tests of MSVC · 4ddbd745
      Michael Paquier authored
      edc2332 has introduced in vcregress.pl some control on the environment
      variables LZ4, TAR and GZIP_PROGRAM to allow any TAP tests to be able
      use those commands.  This makes the settings more consistent with
      src/Makefile.global.in, as the same default gets used for Make and MSVC
      builds.
      
      Each parameter can be changed in buildenv.pl, but as a default gets
      assigned after loading buldenv.pl, it is not possible to unset any of
      these, and using an empty value would not work with "||=" either.  As
      some environments may not have a compatible command in their PATH (tar
      coming from MinGW is an issue, for one), this could break tests without
      an exit path to bypass any failing test.  This commit changes things so
      as the default values for LZ4, TAR and GZIP_PROGRAM are assigned before
      loading buildenv.pl, not after.  This way, we keep the same amount of
      compatibility as a GNU build with the same defaults, and it becomes
      possible to unset any of those values.
      
      While on it, this adds some documentation about those three variables in
      the section dedicated to the TAP tests for MSVC.
      
      Per discussion with Andrew Dunstan.
      
      Discussion: https://postgr.es/m/YbGYe483803il3X7@paquier.xyz
      Backpatch-through: 10
      4ddbd745
  14. 14 Dec, 2021 2 commits
  15. 13 Dec, 2021 3 commits
  16. 09 Dec, 2021 2 commits
  17. 08 Dec, 2021 5 commits
  18. 07 Dec, 2021 2 commits
  19. 03 Dec, 2021 2 commits
  20. 02 Dec, 2021 2 commits
    • Tom Lane's avatar
      On Windows, close the client socket explicitly during backend shutdown. · 4cd29285
      Tom Lane authored
      It turns out that this is necessary to keep Winsock from dropping any
      not-yet-sent data, such as an error message explaining the reason for
      process termination.  It's pretty weird that the implicit close done
      by the kernel acts differently from an explicit close, but it's hard
      to argue with experimental results.
      
      Independently submitted by Alexander Lakhin and Lars Kanis (comments
      by me, though).  Back-patch to all supported branches.
      
      Discussion: https://postgr.es/m/90b34057-4176-7bb0-0dbb-9822a5f6425b@greiz-reinsdorf.de
      Discussion: https://postgr.es/m/16678-253e48d34dc0c376@postgresql.org
      4cd29285
    • Michael Paquier's avatar
      Move into separate file all the SQL queries used in pg_upgrade tests · b6dac98b
      Michael Paquier authored
      The existing pg_upgrade/test.sh and the buildfarm code have been holding
      the same set of SQL queries when doing cross-version upgrade tests to
      adapt the objects created by the regression tests before the upgrade
      (mostly, incompatible or non-existing objects need to be dropped from
      the origin, perhaps re-created).
      
      This moves all those SQL queries into a new, separate, file with a set
      of \if clauses to handle the version checks depending on the old version
      of the cluster to-be-upgraded.
      
      The long-term plan is to make the buildfarm code re-use this new SQL
      file, so as committers are able to fix any compatibility issues in the
      tests of pg_upgrade with a refresh of the core code, without having to
      poke at the buildfarm client.  Note that this is only able to handle the
      main regression test suite, and that nothing is done yet for contrib
      modules yet (these have more issues like their database names).
      
      A backpatch down to 10 is done, adapting the version checks as this
      script needs to be only backward-compatible, so as it becomes possible
      to clean up a maximum amount of code within the buildfarm client.
      
      Author: Justin Pryzby, Michael Paquier
      Discussion: https://postgr.es/m/20201206180248.GI24052@telsasoft.com
      Backpatch-through: 10
      b6dac98b