1. 01 Apr, 2020 2 commits
    • Bruce Momjian's avatar
      psql: do file completion for \gx · 08481eed
      Bruce Momjian authored
      This was missed when the feature was added.
      
      Reported-by: Vik Fearing
      
      Discussion: https://postgr.es/m/eca20529-0b06-b493-ee38-f071a75dcd5b@postgresfriends.org
      
      Backpatch-through: 10
      08481eed
    • Michael Paquier's avatar
      Add -c/--restore-target-wal to pg_rewind · a7e8ece4
      Michael Paquier authored
      pg_rewind needs to copy from the source cluster to the target cluster a
      set of relation blocks changed from the previous checkpoint where WAL
      forked up to the end of WAL on the target.  Building this list of
      relation blocks requires a range of WAL segments that may not be present
      anymore on the target's pg_wal, causing pg_rewind to fail.  It is
      possible to work around this issue by copying manually the WAL segments
      needed but this may lead to some extra and actually useless work.
      
      This commit introduces a new option allowing pg_rewind to use a
      restore_command while doing the rewind by grabbing the parameter value
      of restore_command from the target cluster configuration.  This allows
      the rewind operation to be more reliable, so as only the WAL segments
      needed by the rewind are restored from the archives.
      
      In order to be able to do that, a new routine is added to src/common/ to
      allow frontend tools to restore files from archives using an
      already-built restore command.  This version is more simple than the
      backend equivalent as there is no need to handle the non-recovery case.
      
      Author: Alexey Kondratov
      Reviewed-by: Andrey Borodin, Andres Freund, Alvaro Herrera, Alexander
      Korotkov, Michael Paquier
      Discussion: https://postgr.es/m/a3acff50-5a0d-9a2c-b3b2-ee36168955c1@postgrespro.ru
      a7e8ece4
  2. 31 Mar, 2020 24 commits
  3. 30 Mar, 2020 14 commits
    • Michael Paquier's avatar
      Revert "Skip redundant anti-wraparound vacuums" · dd9ac7d5
      Michael Paquier authored
      This reverts commit 2aa6e331, that added a fast path to skip
      anti-wraparound and non-aggressive autovacuum jobs (these have no sense
      as anti-wraparound implies aggressive).  With a cluster using a high
      amount of relations with a portion of them being heavily updated, this
      could cause autovacuum to lock down, with autovacuum workers attempting
      repeatedly those jobs on the same relations for the same database, that
      just kept being skipped.  This lock down can be solved with a manual
      VACUUM FREEZE.
      
      Justin King has reported one environment where the issue happened, and
      Julien Rouhaud and I have been able to reproduce it in a second
      environment.  With a very aggressive autovacuum_freeze_max_age,
      triggering those jobs with pgbench is a matter of minutes, and hitting
      the lock down is a lot harder (my local tests failed to do that).
      
      Note that anti-wraparound and non-aggressive jobs can only be triggered
      on a subset of shared catalogs:
      - pg_auth_members
      - pg_authid
      - pg_database
      - pg_replication_origin
      - pg_shseclabel
      - pg_subscription
      - pg_tablespace
      While the lock down was possible down to v12, the root cause of those
      jobs is a much older issue, which needs more analysis.
      
      Bonus thanks to Andres Freund for the discussion.
      
      Reported-by: Justin King
      Discussion: https://postgr.es/m/CAE39h22zPLrkH17GrkDgAYL3kbjvySYD1io+rtnAUFnaJJVS4g@mail.gmail.com
      Backpatch-through: 12
      dd9ac7d5
    • Peter Geoghegan's avatar
      Refactor nbtree high key truncation. · 7c2dbc69
      Peter Geoghegan authored
      Simplify _bt_truncate(), the routine that generates truncated leaf page
      high keys.  Remove a micro-optimization that avoided a second palloc0()
      call (this was used when a heap TID was needed in the final pivot tuple,
      though only when the index happened to not be an INCLUDE index).
      
      Removing this dubious micro-optimization allows _bt_truncate() to use
      the index_truncate_tuple() indextuple.c utility routine in all cases.
      This was already the common case.
      
      This commit is a HEAD-only follow up to bugfix commit 4b42a899.
      7c2dbc69
    • Andres Freund's avatar
      Deduplicate PageIsNew() check in lazy_scan_heap(). · d4b34f60
      Andres Freund authored
      The recheck isn't needed anymore, as RelationGetBufferForTuple() now
      extends the relation with RBM_ZERO_AND_LOCK. Previously we needed to
      handle the fact that relation extension extended the relation and then
      separately acquired a lock on the page - while expecting that the page
      is empty.
      
      Reported-By: Ranier Vilela
      Discussion: https://postgr.es/m/CAEudQArA_=J0D5T258xsCY6Xtf6wiH4b=QDPDgVS+WZUN10WDw@mail.gmail.com
      d4b34f60
    • Alexander Korotkov's avatar
      Fix missing SP-GiST support in 911e7020 · 364bdd0b
      Alexander Korotkov authored
      911e7020 misses setting of amoptsprocnum for SP-GiST.  This commit fixes
      that.
      364bdd0b
    • Alexander Korotkov's avatar
      Remove rudiments of supporting procnum == 0 from 911e7020 · 851b14b0
      Alexander Korotkov authored
      Early versions of opclass options patch uses zero support procedure as opclass
      options procedure.  This commit removes rudiments of it, which were committed
      in 911e7020.  Also, it implements correct handling of amoptsprocnum == 0.
      851b14b0
    • Peter Geoghegan's avatar
      Consistently truncate non-key suffix columns. · 4b42a899
      Peter Geoghegan authored
      INCLUDE indexes failed to have their non-key attributes physically
      truncated away in certain rare cases.  This led to physically larger
      pivot tuples that contained useless non-key attribute values.  The
      impact on users should be negligible, but this is still clearly a
      regression (Postgres 11 supports INCLUDE indexes, and yet was not
      affected).
      
      The bug appeared in commit dd299df8, which introduced "true" suffix
      truncation of key attributes.
      
      Discussion: https://postgr.es/m/CAH2-Wz=E8pkV9ivRSFHtv812H5ckf8s1-yhx61_WrJbKccGcrQ@mail.gmail.com
      Backpatch: 12-, where "true" suffix truncation was introduced.
      4b42a899
    • Alexander Korotkov's avatar
      Implement operator class parameters · 911e7020
      Alexander Korotkov authored
      PostgreSQL provides set of template index access methods, where opclasses have
      much freedom in the semantics of indexing.  These index AMs are GiST, GIN,
      SP-GiST and BRIN.  There opclasses define representation of keys, operations on
      them and supported search strategies.  So, it's natural that opclasses may be
      faced some tradeoffs, which require user-side decision.  This commit implements
      opclass parameters allowing users to set some values, which tell opclass how to
      index the particular dataset.
      
      This commit doesn't introduce new storage in system catalog.  Instead it uses
      pg_attribute.attoptions, which is used for table column storage options but
      unused for index attributes.
      
      In order to evade changing signature of each opclass support function, we
      implement unified way to pass options to opclass support functions.  Options
      are set to fn_expr as the constant bytea expression.  It's possible due to the
      fact that opclass support functions are executed outside of expressions, so
      fn_expr is unused for them.
      
      This commit comes with some examples of opclass options usage.  We parametrize
      signature length in GiST.  That applies to multiple opclasses: tsvector_ops,
      gist__intbig_ops, gist_ltree_ops, gist__ltree_ops, gist_trgm_ops and
      gist_hstore_ops.  Also we parametrize maximum number of integer ranges for
      gist__int_ops.  However, the main future usage of this feature is expected
      to be json, where users would be able to specify which way to index particular
      json parts.
      
      Catversion is bumped.
      
      Discussion: https://postgr.es/m/d22c3a18-31c7-1879-fc11-4c1ce2f5e5af%40postgrespro.ru
      Author: Nikita Glukhov, revised by me
      Reviwed-by: Nikolay Shaplov, Robert Haas, Tom Lane, Tomas Vondra, Alvaro Herrera
      911e7020
    • Peter Eisentraut's avatar
      Allow using Unix-domain sockets on Windows in tests · 1d53432f
      Peter Eisentraut authored
      The test suites currently don't use Unix-domain sockets on Windows.
      This optionally allows enabling that by setting the environment
      variable PG_TEST_USE_UNIX_SOCKETS.
      
      This should currently be considered experimental.  In particular,
      pg_regress.c contains some comments that the cleanup code for
      Unix-domain sockets doesn't work correctly under Windows, which hasn't
      been an problem until now.  But it's good enough for locally
      supervised testing of the functionality.
      Reviewed-by: default avatarAndrew Dunstan <andrew.dunstan@2ndquadrant.com>
      Discussion: https://www.postgresql.org/message-id/flat/54bde68c-d134-4eb8-5bd3-8af33b72a010@2ndquadrant.com
      1d53432f
    • Tom Lane's avatar
      Be more careful about extracting encoding from locale strings on Windows. · 8c49454c
      Tom Lane authored
      GetLocaleInfoEx() can fail on strings that setlocale() was perfectly
      happy with.  A common way for that to happen is if the locale string
      is actually a Unix-style string, say "et_EE.UTF-8".  In that case,
      what's after the dot is an encoding name, not a Windows codepage number;
      blindly treating it as a codepage number led to failure, with a fairly
      silly error message.  Hence, check to see if what's after the dot is
      all digits, and if not, treat it as a literal encoding name rather than
      a codepage number.  This will do the right thing with many Unix-style
      locale strings, and produce a more sensible error message otherwise.
      
      Somewhat independently of that, treat a zero (CP_ACP) result from
      GetLocaleInfoEx() as meaning that we must use UTF-8 encoding.
      
      Back-patch to all supported branches.
      
      Juan José Santamaría Flecha
      
      Discussion: https://postgr.es/m/24905.1585445371@sss.pgh.pa.us
      8c49454c
    • David Rowley's avatar
      Attempt to fix unstable regression tests, take 2 · 24566b35
      David Rowley authored
      Following up on 2dc16efe, petalura has suffered some additional
      failures in stats_ext which again appear to be around the timing of an
      autovacuum during the test, causing instability in the row estimates.
      
      Again, let's fix this by explicitly performing a VACUUM on the table
      and not leave it to happen by chance of an autovacuum pass.
      
      Discussion: https://postgr.es/m/CAApHDvok5hmXr%2BbUbJe7%2B2sQzWo4B_QzSk7RKFR9fP6BjYXx5g%40mail.gmail.com
      24566b35
    • Fujii Masao's avatar
      Report waiting via PS while recovery is waiting for buffer pin in hot standby. · 64638ccb
      Fujii Masao authored
      Previously while the startup process was waiting for the recovery conflict
      with snapshot, tablespace or lock to be resolved, waiting was reported in
      PS display, but not in the case of recovery conflict with buffer pin.
      This commit makes the startup process in hot standby report waiting via PS
      while waiting for the conflicts with other backends holding buffer pins to
      be resolved.
      
      Author: Masahiko Sawada
      Reviewed-by: Fujii Masao
      Discussion: https://postgr.es/m/CA+fd4k4mXWTwfQLS3RPwGr4xnfAEs1ysFfgYHvmmoUgv6Zxvmg@mail.gmail.com
      64638ccb
    • Peter Eisentraut's avatar
      Improve handling of parameter differences in physical replication · 246f136e
      Peter Eisentraut authored
      When certain parameters are changed on a physical replication primary,
      this is communicated to standbys using the XLOG_PARAMETER_CHANGE WAL
      record.  The standby then checks whether its own settings are at least
      as big as the ones on the primary.  If not, the standby shuts down
      with a fatal error.
      
      The correspondence of settings between primary and standby is required
      because those settings influence certain shared memory sizings that
      are required for processing WAL records that the primary might send.
      For example, if the primary sends a prepared transaction, the standby
      must have had max_prepared_transaction set appropriately or it won't
      be able to process those WAL records.
      
      However, fatally shutting down the standby immediately upon receipt of
      the parameter change record might be a bit of an overreaction.  The
      resources related to those settings are not required immediately at
      that point, and might never be required if the activity on the primary
      does not exhaust all those resources.  If we just let the standby roll
      on with recovery, it will eventually produce an appropriate error when
      those resources are used.
      
      So this patch relaxes this a bit.  Upon receipt of
      XLOG_PARAMETER_CHANGE, we still check the settings but only issue a
      warning and set a global flag if there is a problem.  Then when we
      actually hit the resource issue and the flag was set, we issue another
      warning message with relevant information.  At that point we pause
      recovery, so a hot standby remains usable.  We also repeat the last
      warning message once a minute so it is harder to miss or ignore.
      Reviewed-by: default avatarSergei Kornilov <sk@zsrv.org>
      Reviewed-by: default avatarMasahiko Sawada <masahiko.sawada@2ndquadrant.com>
      Reviewed-by: default avatarKyotaro Horiguchi <horikyota.ntt@gmail.com>
      Discussion: https://www.postgresql.org/message-id/flat/4ad69a4c-cc9b-0dfe-0352-8b1b0cd36c7b@2ndquadrant.com
      246f136e
    • Peter Eisentraut's avatar
      a01e1b8b
    • Fujii Masao's avatar
      Allow the planner-related functions and hook to accept the query string. · 6aba63ef
      Fujii Masao authored
      This commit adds query_string argument into the planner-related functions
      and hook and allows us to pass the query string to them.
      
      Currently there is no user of the query string passed. But the upcoming patch
      for the planning counters will add the planning hook function into
      pg_stat_statements and the function will need the query string. So this change
      will be necessary for that patch.
      
      Also this change is useful for some extensions that want to use the query
      string in their planner hook function.
      
      Author: Pascal Legrand, Julien Rouhaud
      Reviewed-by: Yoshikazu Imai, Tom Lane, Fujii Masao
      Discussion: https://postgr.es/m/CAOBaU_bU1m3_XF5qKYtSj1ua4dxd=FWDyh2SH4rSJAUUfsGmAQ@mail.gmail.com
      Discussion: https://postgr.es/m/1583789487074-0.post@n3.nabble.com
      6aba63ef