1. 11 Apr, 2019 2 commits
    • Tom Lane's avatar
      Remove redundant and ineffective test for btree insertion fast path. · f72d9a5e
      Tom Lane authored
      indexing.sql's test for this feature was added along with the
      feature in commit 2b272734.  However, shortly later that test was
      rendered ineffective by commit 074251db, which limited when the
      optimization would be applied, so that the test didn't test it.
      Since then, commit dd299df8 added new tests (in btree_index.sql)
      that actually do test the feature.  Code coverage comparisons
      confirm that this test sequence adds no meaningful coverage, and
      it's rather expensive, accounting for nearly half of the runtime
      of indexing.sql according to my measurements.  So let's remove it.
      
      Per advice from Peter Geoghegan.
      
      Discussion: https://postgr.es/m/735.1554935715@sss.pgh.pa.us
      f72d9a5e
    • Alvaro Herrera's avatar
      Fix declaration after statement · 65d857d9
      Alvaro Herrera authored
      This style is frowned upon.  I inadvertently introduced one in commit
      fe0e0b4f.  (My compiler does not complain about it, even though
      -Wdeclaration-after-statement is specified.  Weird.)
      
      Author: Masahiko Sawada
      65d857d9
  2. 10 Apr, 2019 4 commits
  3. 09 Apr, 2019 9 commits
  4. 08 Apr, 2019 11 commits
  5. 07 Apr, 2019 5 commits
    • Tom Lane's avatar
      Avoid fetching past the end of the indoption array. · 80a96e06
      Tom Lane authored
      pg_get_indexdef_worker carelessly fetched indoption entries even for
      non-key index columns that don't have one.  99.999% of the time this
      would be harmless, since the code wouldn't examine the value ... but
      some fine day this will be a fetch off the end of memory, resulting
      in SIGSEGV.
      
      Detected through valgrind testing.  Odd that the buildfarm's valgrind
      critters haven't noticed.
      80a96e06
    • Alvaro Herrera's avatar
      psql \dP: list partitioned tables and indexes · 1c5d9270
      Alvaro Herrera authored
      The new command lists partitioned relations (tables and/or indexes),
      possibly with their sizes, possibly including partitioned partitions;
      their parents (if not top-level); if indexes show the tables they belong
      to; and their descriptions.
      
      While there are various possible improvements to this, having it in this
      form is already a great improvement over not having any way to obtain
      this report.
      
      Author: Pavel Stěhule, with help from Mathias Brossard, Amit Langote and
      	Justin Pryzby.
      Reviewed-by: Amit Langote, Mathias Brossard, Melanie Plageman,
      	Michaël Paquier, Álvaro Herrera
      1c5d9270
    • Tom Lane's avatar
      Clean up side-effects of commits ab5fcf2b et al. · 159970bc
      Tom Lane authored
      Before those commits, partitioning-related code in the executor could
      assume that ModifyTableState.resultRelInfo[] contains only leaf partitions.
      However, now a fully-pruned update results in a dummy ModifyTable that
      references the root partitioned table, and that breaks some stuff.
      
      In v11, this led to an assertion or core dump in the tuple routing code.
      Fix by disabling tuple routing, since we don't need that anyway.
      (I chose to do that in HEAD as well for safety, even though the problem
      doesn't manifest in HEAD as it stands.)
      
      In v10, this confused ExecInitModifyTable's decision about whether it
      needed to close the root table.  But we can get rid of that altogether
      by being smarter about where to find the root table.
      
      Note that since the referenced commits haven't shipped yet, this
      isn't fixing any bug the field has seen.
      
      Amit Langote, per a report from me
      
      Discussion: https://postgr.es/m/20710.1554582479@sss.pgh.pa.us
      159970bc
    • Peter Eisentraut's avatar
      Report progress of REINDEX operations · 03f9e5cb
      Peter Eisentraut authored
      This uses the same infrastructure that the CREATE INDEX progress
      reporting uses.  Add a column to pg_stat_progress_create_index to
      report the OID of the index being worked on.  This was not necessary
      for CREATE INDEX, but it's useful for REINDEX.
      
      Also edit the phase descriptions a bit to be more consistent with the
      source code comments.
      
      Discussion: https://www.postgresql.org/message-id/ef6a6757-c36a-9e81-123f-13b19e36b7d7%402ndquadrant.com
      03f9e5cb
    • Peter Eisentraut's avatar
      Cast pg_stat_progress_cluster.cluster_index_relid to oid · 106f2eb6
      Peter Eisentraut authored
      It's tracked internally as bigint, but when presented to the user it
      should be oid.
      106f2eb6
  6. 06 Apr, 2019 3 commits
  7. 05 Apr, 2019 6 commits
    • Tom Lane's avatar
      Use Append rather than MergeAppend for scanning ordered partitions. · 959d00e9
      Tom Lane authored
      If we need ordered output from a scan of a partitioned table, but
      the ordering matches the partition ordering, then we don't need to
      use a MergeAppend to combine the pre-ordered per-partition scan
      results: a plain Append will produce the same results.  This
      both saves useless comparison work inside the MergeAppend proper,
      and allows us to start returning tuples after istarting up just
      the first child node not all of them.
      
      However, all is not peaches and cream, because if some of the
      child nodes have high startup costs then there will be big
      discontinuities in the tuples-returned-versus-elapsed-time curve.
      The planner's cost model cannot handle that (yet, anyway).
      If we model the Append's startup cost as being just the first
      child's startup cost, we may drastically underestimate the cost
      of fetching slightly more tuples than are available from the first
      child.  Since we've had bad experiences with over-optimistic choices
      of "fast start" plans for ORDER BY LIMIT queries, that seems scary.
      As a klugy workaround, set the startup cost estimate for an ordered
      Append to be the sum of its children's startup costs (as MergeAppend
      would).  This doesn't really describe reality, but it's less likely
      to cause a bad plan choice than an underestimated startup cost would.
      In practice, the cases where we really care about this optimization
      will have child plans that are IndexScans with zero startup cost,
      so that the overly conservative estimate is still just zero.
      
      David Rowley, reviewed by Julien Rouhaud and Antonin Houska
      
      Discussion: https://postgr.es/m/CAKJS1f-hAqhPLRk_RaSFTgYxd=Tz5hA7kQ2h4-DhJufQk8TGuw@mail.gmail.com
      959d00e9
    • Alvaro Herrera's avatar
      Add facility to copy replication slots · 9f06d79e
      Alvaro Herrera authored
      This allows the user to create duplicates of existing replication slots,
      either logical or physical, and even changing properties such as whether
      they are temporary or the output plugin used.
      
      There are multiple uses for this, such as initializing multiple replicas
      using the slot for one base backup; when doing investigation of logical
      replication issues; and to select a different output plugins.
      
      Author: Masahiko Sawada
      Reviewed-by: Michael Paquier, Andres Freund, Petr Jelinek
      Discussion: https://postgr.es/m/CAD21AoAm7XX8y_tOPP6j4Nzzch12FvA1wPqiO690RCk+uYVstg@mail.gmail.com
      9f06d79e
    • Thomas Munro's avatar
      Wake up interested backends when a checkpoint fails. · de2b3841
      Thomas Munro authored
      Commit c6c9474a switched to condition variables instead of sleep
      loops to notify backends of checkpoint start and stop, but forgot
      to broadcast in case of checkpoint failure.
      
      Author: Thomas Munro
      Discussion: https://postgr.es/m/CA%2BhUKGJKbCd%2B_K%2BSEBsbHxVT60SG0ivWHHAdvL0bLTUt2xpA2w%40mail.gmail.com
      de2b3841
    • Robert Haas's avatar
      Fix missing word. · 6665305e
      Robert Haas authored
      Nathan Bossart
      
      Discussion: http://postgr.es/m/2C63765B-AD31-4F6C-8DA7-C8544634C714@amazon.com
      6665305e
    • Tom Lane's avatar
      Ensure consistent name matching behavior in processSQLNamePattern(). · 478cacb5
      Tom Lane authored
      Prior to v12, if you used a collation-sensitive regex feature in a
      pattern handled by processSQLNamePattern() (for instance, \d '\\w+'
      in psql), the behavior you got matched the database's default collation.
      Since commit 586b98fd you'd usually get C-collation behavior, because
      the catalog "name"-type columns are now marked as COLLATE "C".  Add
      explicit COLLATE specifications to restore the prior behavior.
      
      (Note for whoever writes the v12 release notes: the need for this shows
      that while 586b98fd preserved pre-v12 behavior of "name" columns for
      simple comparison operators, it changed the behavior of regex operators
      on those columns.  Although this patch fixes it for pattern matches
      generated by our own tools, user-written queries will still be affected.
      So we'd better mention this issue as a compatibility item.)
      
      Daniel Vérité
      
      Discussion: https://postgr.es/m/701e51f0-0ec0-4e70-a365-1958d66dd8d2@manitou-mail.org
      478cacb5
    • Andres Freund's avatar
      table: docs: fix typos and grammar. · 86cc06d1
      Andres Freund authored
      Author: Justin Pryzby
      Discussion: https://postgr.es/m/20190404055138.GA24864@telsasoft.com
      86cc06d1