1. 28 Jan, 2021 8 commits
  2. 27 Jan, 2021 8 commits
    • Peter Geoghegan's avatar
      Reduce the default value of vacuum_cost_page_miss. · e19594c5
      Peter Geoghegan authored
      When commit f425b605 introduced cost based vacuum delays back in 2004,
      the defaults reflected then-current trends in hardware, as well as
      certain historical limitations in PostgreSQL.  There have been enormous
      improvements in both areas since that time.  The cost limit GUC defaults
      finally became much more representative of current trends following
      commit cbccac37, which decreased autovacuum_vacuum_cost_delay's default
      by 10x for PostgreSQL 12 (it went from 20ms to only 2ms).
      
      The relative costs have shifted too.  This should also be accounted for
      by the defaults.  More specifically, the relative importance of avoiding
      dirtying pages within VACUUM has greatly increased, primarily due to
      main memory capacity scaling and trends in flash storage.  Within
      Postgres itself, improvements like sequential access during index
      vacuuming (at least in nbtree and GiST indexes) have also been
      contributing factors.
      
      To reflect all this, decrease the default of vacuum_cost_page_miss to 2.
      Since the default of vacuum_cost_page_dirty remains 20, dirtying a page
      is now considered 10x "costlier" than a page miss by default.
      
      Author: Peter Geoghegan <pg@bowt.ie>
      Discussion: https://postgr.es/m/CAH2-WzmLPFnkWT8xMjmcsm7YS3+_Qi3iRWAb2+_Bc8UhVyHfuA@mail.gmail.com
      e19594c5
    • Robert Haas's avatar
      In TrimCLOG(), don't reset XactCtl->shared->latest_page_number. · 69059d3b
      Robert Haas authored
      Since the CLOG page number is not recorded directly in the checkpoint
      record, we have to use ShmemVariableCache->nextXid to figure out the
      latest CLOG page number at the start of recovery. However, as recovery
      progresses, replay of CLOG/EXTEND records will update our notion of
      the latest page number, and we should rely on that being accurate
      rather than recomputing the value based on an updated notion of
      nextXid. ShmemVariableCache->nextXid is only an approximation
      during recovery anyway, whereas CLOG/EXTEND records are an
      authoritative representation of how the SLRU has been updated.
      
      Commit 0fcc2dec makes this
      simplification possible, as before that change clog_redo() might
      have injected a bogus value here, and we'd want to get rid of
      that before entering normal running.
      
      Patch by me, reviewed by Heikki Linnakangas.
      
      Discussion: http://postgr.es/m/CA+TgmoZYig9+AQodhF5sRXuKkJ=RgFDugLr3XX_dz_F-p=TwTg@mail.gmail.com
      69059d3b
    • Robert Haas's avatar
      In clog_redo(), don't set XactCtl->shared->latest_page_number. · 0fcc2dec
      Robert Haas authored
      The comment is no longer accurate, and hasn't been entirely accurate
      since Hot Standby was introduced. The original idea here was that
      StartupCLOG() wouldn't be called until the end of recovery and
      therefore this value would be uninitialized when this code is reached,
      but Hot Standby made that true only when hot_standby=off, and commit
      1f113abd means that this value is now
      always initialized before replay even starts.
      
      The original purpose of this code was to bypass the sanity check
      in SimpleLruTruncate(), which will no longer occur: now, if something
      is wrong, that sanity check might trip during recovery. That's
      probably a good thing, because in the current code base
      latest_page_number should always be initialized and therefore we
      expect that the sanity check should pass. If it doesn't, something
      has gone wrong, and complaining about it is appropriate.
      
      Patch by me, reviewed by Heikki Linnakangas.
      
      Discussion: http://postgr.es/m/CA+TgmoZYig9+AQodhF5sRXuKkJ=RgFDugLr3XX_dz_F-p=TwTg@mail.gmail.com
      0fcc2dec
    • Tom Lane's avatar
      Doc: improve documentation for UNNEST(). · 662affcf
      Tom Lane authored
      Per a user question, spell out that UNNEST() returns array elements
      in storage order; also provide an example to clarify the behavior for
      multi-dimensional arrays.
      
      While here, also clarify the SELECT reference page's description of
      WITH ORDINALITY.  These details were already given in 7.2.1.4, but
      a reference page should not omit details.
      
      Back-patch to v13; there's not room in the table in older versions.
      
      Discussion: https://postgr.es/m/FF1FB31F-0507-4F18-9559-2DE6E07E3B43@gmail.com
      662affcf
    • Robert Haas's avatar
      Move StartupCLOG() calls to just after we initialize ShmemVariableCache. · 1f113abd
      Robert Haas authored
      Previously, the hot_standby=off code path did this at end of recovery,
      while the hot_standby=on code path did it at the beginning of recovery.
      It's better to do this in only one place because (a) it's simpler,
      (b) StartupCLOG() is trivial so trying to postpone the work isn't
      useful, and (c) this will make it possible to simplify some other
      logic.
      
      Patch by me, reviewed by Heikki Linnakangas.
      
      Discussion: http://postgr.es/m/CA+TgmoZYig9+AQodhF5sRXuKkJ=RgFDugLr3XX_dz_F-p=TwTg@mail.gmail.com
      1f113abd
    • Peter Geoghegan's avatar
      Fix GiST index deletion assert issue. · e42b3c3b
      Peter Geoghegan authored
      Avoid calling heap_index_delete_tuples() with an empty deltids array to
      avoid an assertion failure.
      
      This issue was arguably an oversight in commit b5f58cf2, though the
      failing assert itself was added by my recent commit d168b666.  No
      backpatch, though, since the oversight is harmless in the back branches.
      
      Author: Peter Geoghegan <pg@bowt.ie>
      Reported-By: default avatarJaime Casanova <jcasanov@systemguards.com.ec>
      Discussion: https://postgr.es/m/CAJKUy5jscES84n3puE=sYngyF+zpb4wv8UMtuLnLPv5z=6yyNw@mail.gmail.com
      e42b3c3b
    • Michael Paquier's avatar
      doc: Remove reference to views for TRUNCATE privilege · 32bef758
      Michael Paquier authored
      The page about privilege rights mentioned that TRUNCATE could be applied
      to views or even other relation types.  This is confusing as this
      command can be used only on tables and on partitioned tables.
      
      Oversight in afc4a78a.
      
      Reported-by: Harisai Hari
      Reviewed-by: Laurenz Albe
      Discussion: https://postgr.es/m/161157636877.14625.15340884663716426087@wrigleys.postgresql.org
      Backpatch-through: 12
      32bef758
    • Michael Paquier's avatar
      Refactor code in tablecmds.c to check and process tablespace moves · 4c9c359d
      Michael Paquier authored
      Two code paths of tablecmds.c (for relations with storage and without
      storage) use the same logic to check if the move of a relation to a
      new tablespace is allowed or not and to update pg_class.reltablespace
      and pg_class.relfilenode.
      
      A potential TABLESPACE clause for REINDEX, CLUSTER and VACUUM FULL needs
      similar checks to make sure that nothing is moved around in illegal ways
      (no mapped relations, shared relations only in pg_global, no move of
      temp tables owned by other backends).
      
      This reorganizes the existing code of ALTER TABLE so as all this logic
      is controlled by two new routines that can be reused for the other
      commands able to move relations across tablespaces, limiting the number
      of code paths in need of the same protections.  This also removes some
      code that was duplicated for tables with and without storage for ALTER
      TABLE.
      
      Author: Alexey Kondratov, Michael Paquier
      Discussion: https://postgr.es/m/YA+9mAMWYLXJMVPL@paquier.xyz
      4c9c359d
  3. 26 Jan, 2021 8 commits
    • Tom Lane's avatar
      Rethink recently-added SPI interfaces. · d5a83d79
      Tom Lane authored
      SPI_execute_with_receiver and SPI_cursor_parse_open_with_paramlist are
      new in v14 (cf. commit 2f48ede0).  Before they can get out the door,
      let's change their APIs to follow the practice recently established by
      SPI_prepare_extended etc: shove all optional arguments into a struct
      that callers are supposed to pre-zero.  The hope is to allow future
      addition of more options without either API breakage or a continuing
      proliferation of new SPI entry points.  With that in mind, choose
      slightly more generic names for them: SPI_execute_extended and
      SPI_cursor_parse_open respectively.
      
      Discussion: https://postgr.es/m/CAFj8pRCLPdDAETvR7Po7gC5y_ibkn_-bOzbeJb39WHms01194Q@mail.gmail.com
      d5a83d79
    • Tom Lane's avatar
      Suppress compiler warnings from commit ee895a65. · 7292fd8f
      Tom Lane authored
      For obscure reasons, some buildfarm members are now generating
      complaints about plpgsql_call_handler's "retval" variable possibly
      being used uninitialized.  It seems no less safe than it was before
      that commit, but these complaints are (mostly?) new.  I trust that
      initializing the variable where it's declared will be enough to
      shut that up.
      
      I also notice that some compilers are warning about setjmp clobber
      of the same variable, which is maybe a bit more defensible.  Mark
      it volatile to silence that.
      
      Also, rearrange the logic to give procedure_resowner a single
      point of initialization, in hopes of silencing some setjmp-clobber
      warnings about that.  (Marking it volatile would serve too, but
      its sibling variables are depending on single assignment, so let's
      stick with that method.)
      
      Discussion: https://postgr.es/m/E1l4F1z-0000cN-Lx@gemulon.postgresql.org
      7292fd8f
    • Tom Lane's avatar
      Code review for psql's helpSQL() function. · f76a8500
      Tom Lane authored
      The loops to identify word boundaries could access past the end of
      the input string.  Likely that would never result in an actual
      crash, but it makes valgrind unhappy.
      
      The logic to try different numbers of words didn't work when the
      input has two words but we only have a match to the first, eg
      "\h with select".  (We must "continue" the pass loop, not "break".)
      
      The logic to compute nl_count was bizarrely managed, and in at
      least two code paths could end up calling PageOutput with
      nl_count = 0, resulting in failing to paginate output that should
      have been fed to the pager.  Also, in v12 and up, the nl_count
      calculation hadn't been updated to account for the addition of a URL.
      
      The PQExpBuffer holding the command syntax details wasn't freed,
      resulting in a session-lifespan memory leak.
      
      While here, improve some comments, choose a more descriptive name
      for a variable, fix inconsistent datatype choice for another variable.
      
      Per bug #16837 from Alexander Lakhin.  This code is very old,
      so back-patch to all supported branches.
      
      Kyotaro Horiguchi and Tom Lane
      
      Discussion: https://postgr.es/m/16837-479bcd56040c71b3@postgresql.org
      f76a8500
    • Michael Paquier's avatar
      Fix memory leak when deallocating prepared statement in postgres_fdw · 7b4c6604
      Michael Paquier authored
      The leak is minor, so no backpatch is done.  Oversight in 21734d2f.
      
      Reported-by: Tom Lane
      7b4c6604
    • Fujii Masao's avatar
      postgres_fdw: Fix test failure with -DENFORCE_REGRESSION_TEST_NAME_RESTRICTIONS · 0c3fc09f
      Fujii Masao authored
      The roles created by regression test should have names starting with
      "regress_", and the test introduced in commit 411ae649 did not do that.
      
      Per buildfarm member longfin.
      
      Discussion: https://postgr.es/m/73fc5ae4-3c54-1262-4533-f8c547de2e60@oss.nttdata.com
      0c3fc09f
    • Fujii Masao's avatar
      postgres_fdw: Stabilize regression test for postgres_fdw_disconnect_all(). · 6adc5376
      Fujii Masao authored
      The regression test added in commit 411ae649 caused buildfarm failures.
      The cause of them was that the order of warning messages output in the test
      was not stable. To fix this, this commit sets client_min_messages to ERROR
      temporarily when performing the test generating those warnings.
      
      Per buildfarm failures.
      
      Discussion: https://postgr.es/m/2147113.1611644754@sss.pgh.pa.us
      6adc5376
    • Fujii Masao's avatar
      postgres_fdw: Add functions to discard cached connections. · 411ae649
      Fujii Masao authored
      This commit introduces two new functions postgres_fdw_disconnect()
      and postgres_fdw_disconnect_all(). The former function discards
      the cached connections to the specified foreign server. The latter discards
      all the cached connections. If the connection is used in the current
      transaction, it's not closed and a warning message is emitted.
      
      For example, these functions are useful when users want to explicitly
      close the foreign server connections that are no longer necessary and
      then to prevent them from eating up the foreign servers connections
      capacity.
      
      Author: Bharath Rupireddy, tweaked a bit by Fujii Masao
      Reviewed-by: Alexey Kondratov, Zhijie Hou, Zhihong Yu, Fujii Masao
      Discussion: https://postgr.es/m/CALj2ACVvrp5=AVp2PupEm+nAC8S4buqR3fJMmaCoc7ftT0aD2A@mail.gmail.com
      411ae649
    • Tom Lane's avatar
      Improve performance of repeated CALLs within plpgsql procedures. · ee895a65
      Tom Lane authored
      This patch essentially is cleaning up technical debt left behind
      by the original implementation of plpgsql procedures, particularly
      commit d92bc83c.  That patch (or more precisely, follow-on patches
      fixing its worst bugs) forced us to re-plan CALL and DO statements
      each time through, if we're in a non-atomic context.  That wasn't
      for any fundamental reason, but just because use of a saved plan
      requires having a ResourceOwner to hold a reference count for the
      plan, and we had no suitable resowner at hand, nor would the
      available APIs support using one if we did.  While it's not that
      expensive to create a "plan" for CALL/DO, the cycles do add up
      in repeated executions.
      
      This patch therefore makes the following API changes:
      
      * GetCachedPlan/ReleaseCachedPlan are modified to let the caller
      specify which resowner to use to pin the plan, rather than forcing
      use of CurrentResourceOwner.
      
      * spi.c gains a "SPI_execute_plan_extended" entry point that lets
      callers say which resowner to use to pin the plan.  This borrows the
      idea of an options struct from the recently added SPI_prepare_extended,
      hopefully allowing future options to be added without more API breaks.
      This supersedes SPI_execute_plan_with_paramlist (which I've marked
      deprecated) as well as SPI_execute_plan_with_receiver (which is new
      in v14, so I just took it out altogether).
      
      * I also took the opportunity to remove the crude hack of letting
      plpgsql reach into SPI private data structures to mark SPI plans as
      "no_snapshot".  It's better to treat that as an option of
      SPI_prepare_extended.
      
      Now, when running a non-atomic procedure or DO block that contains
      any CALL or DO commands, plpgsql creates a ResourceOwner that
      will be used to pin the plans of the CALL/DO commands.  (In an
      atomic context, we just use CurrentResourceOwner, as before.)
      Having done this, we can just save CALL/DO plans normally,
      whether or not they are used across transaction boundaries.
      This seems to be good for something like 2X speedup of a CALL
      of a trivial procedure with a few simple argument expressions.
      By restricting the creation of an extra ResourceOwner like this,
      there's essentially zero penalty in cases that can't benefit.
      
      Pavel Stehule, with some further hacking by me
      
      Discussion: https://postgr.es/m/CAFj8pRCLPdDAETvR7Po7gC5y_ibkn_-bOzbeJb39WHms01194Q@mail.gmail.com
      ee895a65
  4. 25 Jan, 2021 8 commits
  5. 24 Jan, 2021 6 commits
  6. 23 Jan, 2021 2 commits