1. 05 Feb, 2018 5 commits
    • Robert Haas's avatar
      Fix possible crash in partition-wise join. · f069c91a
      Robert Haas authored
      The previous code assumed that we'd always succeed in creating
      child-joins for a joinrel for which partition-wise join was considered,
      but that's not guaranteed, at least in the case where dummy rels
      are involved.
      
      Ashutosh Bapat, with some wordsmithing by me.
      
      Discussion: http://postgr.es/m/CAFjFpRf8=uyMYYfeTBjWDMs1tR5t--FgOe2vKZPULxxdYQ4RNw@mail.gmail.com
      f069c91a
    • Tom Lane's avatar
      Last-minute updates for release notes. · 1eb5d43b
      Tom Lane authored
      Security: CVE-2018-1052, CVE-2018-1053
      1eb5d43b
    • Tom Lane's avatar
      Ensure that all temp files made during pg_upgrade are non-world-readable. · a926eb84
      Tom Lane authored
      pg_upgrade has always attempted to ensure that the transient dump files
      it creates are inaccessible except to the owner.  However, refactoring
      in commit 76a7650c broke that for the file containing "pg_dumpall -g"
      output; since then, that file was protected according to the process's
      default umask.  Since that file may contain role passwords (hopefully
      encrypted, but passwords nonetheless), this is a particularly unfortunate
      oversight.  Prudent users of pg_upgrade on multiuser systems would
      probably run it under a umask tight enough that the issue is moot, but
      perhaps some users are depending only on pg_upgrade's umask changes to
      protect their data.
      
      To fix this in a future-proof way, let's just tighten the umask at
      process start.  There are no files pg_upgrade needs to write at a
      weaker security level; and if there were, transiently relaxing the
      umask around where they're created would be a safer approach.
      
      Report and patch by Tom Lane; the idea for the fix is due to Noah Misch.
      Back-patch to all supported branches.
      
      Security: CVE-2018-1053
      a926eb84
    • Tom Lane's avatar
      Fix RelationBuildPartitionKey's processing of partition key expressions. · 3492a0af
      Tom Lane authored
      Failure to advance the list pointer while reading partition expressions
      from a list results in invoking an input function with inappropriate data,
      possibly leading to crashes or, with carefully crafted input, disclosure
      of arbitrary backend memory.
      
      Bug discovered independently by Álvaro Herrera and David Rowley.
      This patch is by Álvaro but owes something to David's proposed fix.
      Back-patch to v10 where the issue was introduced.
      
      Security: CVE-2018-1052
      3492a0af
    • Tom Lane's avatar
      Skip setting up shared instrumentation for Hash node if not needed. · 05d0f13f
      Tom Lane authored
      We don't need to set up the shared space for hash join instrumentation data
      if instrumentation hasn't been requested.  Let's follow the example of the
      similar Sort node code and save a few cycles by skipping that when we can.
      
      This reverts commit d59ff4ab and instead allows us to use the safer choice
      of passing noError = false to shm_toc_lookup in ExecHashInitializeWorker,
      since if we reach that call there should be a TOC entry to be found.
      
      Thomas Munro
      
      Discussion: https://postgr.es/m/E1ehkoZ-0005uW-43%40gemulon.postgresql.org
      05d0f13f
  2. 04 Feb, 2018 3 commits
  3. 03 Feb, 2018 4 commits
  4. 02 Feb, 2018 8 commits
    • Tom Lane's avatar
      Fix another instance of unsafe coding for shm_toc_lookup failure. · d59ff4ab
      Tom Lane authored
      One or another author of commit 5bcf389e seems to have thought that
      computing an offset from a NULL pointer would yield another NULL pointer.
      There may possibly be architectures where that works, but common machines
      don't work like that.  Per a quick code review of places calling
      shm_toc_lookup and not using noError = false.
      d59ff4ab
    • Tom Lane's avatar
      Be more wary about shm_toc_lookup failure. · 957ff087
      Tom Lane authored
      Commit 445dbd82 basically missed the point of commit d4663350,
      which was that we shouldn't allow shm_toc_lookup() failure to lead
      to a core dump or assertion crash, because the odds of such a
      failure should never be considered negligible.  It's correct that
      we can't expect the PARALLEL_KEY_ERROR_QUEUE TOC entry to be there
      if we have no workers.  But if we have no workers, we're not going
      to do anything in this function with the lookup result anyway,
      so let's just skip it.  That lets the code use the easy-to-prove-safe
      noError=false case, rather than anything requiring effort to review.
      
      Back-patch to v10, like the previous commit.
      
      Discussion: https://postgr.es/m/3647.1517601675@sss.pgh.pa.us
      957ff087
    • Tom Lane's avatar
      First-draft release notes for 10.2. · bf641d33
      Tom Lane authored
      As usual, the release notes for other branches will be made by cutting
      these down, but put them up for community review first.
      bf641d33
    • Peter Eisentraut's avatar
      Fix application of identity values in some cases · 533c5d8b
      Peter Eisentraut authored
      Investigation of 2d2d06b7 revealed that
      identity values were not applied in some further cases, including
      logical replication subscribers, VALUES RTEs, and ALTER TABLE ... ADD
      COLUMN.  To fix all that, apply the identity column expression in
      build_column_default() instead of repeating the same logic at each call
      site.
      
      For ALTER TABLE ... ADD COLUMN ... IDENTITY, the previous coding
      completely ignored that existing rows for the new column should have
      values filled in from the identity sequence.  The coding using
      build_column_default() fails for this because the sequence ownership
      isn't registered until after ALTER TABLE, and we can't do it before
      because we don't have the column in the catalog yet.  So we specially
      remember in ColumnDef the sequence name that we decided on and build a
      custom NextValueExpr using that.
      Reviewed-by: default avatarMichael Paquier <michael.paquier@gmail.com>
      533c5d8b
    • Robert Haas's avatar
      Support parallel btree index builds. · 9da0cc35
      Robert Haas authored
      To make this work, tuplesort.c and logtape.c must also support
      parallelism, so this patch adds that infrastructure and then applies
      it to the particular case of parallel btree index builds.  Testing
      to date shows that this can often be 2-3x faster than a serial
      index build.
      
      The model for deciding how many workers to use is fairly primitive
      at present, but it's better than not having the feature.  We can
      refine it as we get more experience.
      
      Peter Geoghegan with some help from Rushabh Lathia.  While Heikki
      Linnakangas is not an author of this patch, he wrote other patches
      without which this feature would not have been possible, and
      therefore the release notes should possibly credit him as an author
      of this feature.  Reviewed by Claudio Freire, Heikki Linnakangas,
      Thomas Munro, Tels, Amit Kapila, me.
      
      Discussion: http://postgr.es/m/CAM3SWZQKM=Pzc=CAHzRixKjp2eO5Q0Jg1SoFQqeXFQ647JiwqQ@mail.gmail.com
      Discussion: http://postgr.es/m/CAH2-Wz=AxWqDoVvGU7dq856S4r6sJAj6DBn7VMtigkB33N5eyg@mail.gmail.com
      9da0cc35
    • Robert Haas's avatar
      Refactor code for partition bound searching · 9aef1731
      Robert Haas authored
      Remove partition_bound_cmp() and partition_bound_bsearch(), whose
      void * argument could be, depending on the situation, of any of
      three different types: PartitionBoundSpec *, PartitionRangeBound *,
      Datum *.
      
      Instead, introduce separate bound-searching functions for each
      situation: partition_list_bsearch, partition_range_bsearch,
      partition_range_datum_bsearch, and partition_hash_bsearch.  This
      requires duplicating the code for binary search, but it makes the
      code much more type safe, involves fewer branches at runtime, and
      at least in my opinion, is much easier to understand.
      
      Along the way, add an option to partition_range_datum_bsearch
      allowing the number of keys to be specified, so that we can search
      for partitions based on a prefix of the full list of partition
      keys.  This is important for pending work to improve partition
      pruning.
      
      Amit Langote, per a suggestion from me.
      
      Discussion: http://postgr.es/m/CA+TgmoaVLDLc8=YESRwD32gPhodU_ELmXyKs77gveiYp+JE4vQ@mail.gmail.com
      9aef1731
    • Robert Haas's avatar
      Add new function WaitForParallelWorkersToAttach. · 9222c0d9
      Robert Haas authored
      Once this function has been called, we know that all workers have
      started and attached to their error queues -- so if any of them
      subsequently exit uncleanly, we'll be sure to throw an ERROR promptly.
      Otherwise, users of the ParallelContext machinery must be careful not
      to wait forever for a worker that has failed to start.  Parallel query
      manages to work without needing this for reasons explained in new
      comments added by this patch, but it's a useful primitive for other
      parallel operations, such as the pending patch to make creating a
      btree index run in parallel.
      
      Amit Kapila, revised by me.  Additional review by Peter Geoghegan.
      
      Discussion: http://postgr.es/m/CAA4eK1+e2MzyouF5bg=OtyhDSX+=Ao=3htN=T-r_6s3gCtKFiw@mail.gmail.com
      9222c0d9
    • Stephen Frost's avatar
      Improve ALTER TABLE synopsis · a2a22057
      Stephen Frost authored
      Add into the ALTER TABLE synopsis the definition of
      partition_bound_spec, column_constraint, index_parameters and
      exclude_element.
      
      Initial patch by Lætitia Avrot, with further improvements by Amit
      Langote and Thomas Munro.
      
      Discussion: https://postgr.es/m/flat/27ec4df3-d1ab-3411-f87f-647f944897e1%40lab.ntt.co.jp
      a2a22057
  5. 01 Feb, 2018 2 commits
  6. 31 Jan, 2018 11 commits
  7. 30 Jan, 2018 5 commits
  8. 29 Jan, 2018 2 commits
    • Andres Freund's avatar
      Introduce ExecQualAndReset() helper. · c12693d8
      Andres Freund authored
      It's a common task to evaluate a qual and reset the corresponding
      expression context. Currently that requires storing the result of the
      qual eval, resetting the context, and then reacting on the result. As
      that's awkward several places only reset the context next time through
      a node. That's not great, so introduce a helper that evaluates and
      resets.
      
      It's a bit ugly that it currently uses MemoryContextReset() instead of
      ResetExprContext(), but that seems easier than reordering all of
      executor.h.
      
      Author: Andres Freund
      Discussion: https://postgr.es/m/20180109222544.f7loxrunqh3xjl5f@alap3.anarazel.de
      c12693d8
    • Tom Lane's avatar
      Save a few bytes by removing useless last argument to SearchCatCacheList. · 97d4445a
      Tom Lane authored
      There's never any value in giving a fully specified cache key to
      SearchCatCacheList: you might as well call SearchCatCache instead,
      since there could be only one match.  So the maximum useful number of
      key arguments is one less than the supported number of key columns.
      We might as well remove the useless extra argument and save some few
      bytes per call site, as well as a cycle or so per call.
      
      I believe the reason it was coded like this is that originally, callers
      had to write out all the dummy arguments in each call, and so it seemed
      less confusing if SearchCatCache and SearchCatCacheList took the same
      number of key arguments.  But since commit e26c539e, callers only write
      their live arguments explicitly, making that a non-factor; and there's
      surely been enough time for third-party modules to adapt to that coding
      style.  So this is only an ABI break not an API break for callers.
      
      Per discussion with Oliver Ford, this might also make it less confusing
      how to use SearchCatCacheList correctly.
      
      Discussion: https://postgr.es/m/27788.1517069693@sss.pgh.pa.us
      97d4445a