1. 21 Jan, 2017 2 commits
    • Tom Lane's avatar
      Fix cross-shlib linking in temporary installs on HPUX 10. · d2ab1176
      Tom Lane authored
      Turns out this has been broken for years and we'd not noticed.  The one
      case that was getting exercised in the buildfarm, or probably anywhere
      else, was postgres_fdw.sl's reference to libpq.sl; and it turns out that
      that was always going to libpq.sl in the actual installation directory
      not the temporary install.  We'd not noticed because the buildfarm script
      does "make install" before it tests contrib.  However, the recent addition
      of a logical-replication test to the core regression scripts resulted in
      trying to use libpqwalreceiver.sl before "make install" happens, and that
      failed for lack of finding libpq.sl, as shown by failures on buildfarm
      members gaur and pademelon.
      
      There are two changes needed to fix it: the magic environment variable to
      specify shlib search path at runtime is SHLIB_PATH not LD_LIBRARY_PATH,
      and the shlib link command needs to specify the +s switch else the library
      will not honor SHLIB_PATH.
      
      I'm not quite sure why buildfarm members anole and gharial (HPUX 11) didn't
      show the same failure.  Consulting man pages on the web says that HPUX 11
      honors both LD_LIBRARY_PATH and SHLIB_PATH, which would explain half of it,
      and the rather confusing wording I've been able to find suggests that +s
      might effectively be the default in HPUX 11.  But it seems at least as
      likely that there's just a libpq.so installed in /usr/lib on that machine;
      as long as it's not too ancient, that would satisfy the test.  In any case
      I do not think this patch will break HPUX 11.
      
      At the moment I don't see a need to back-patch this, since it only matters
      for testing purposes, not to mention that HPUX 10 is probably dead in the
      real world anyway.
      d2ab1176
    • Peter Eisentraut's avatar
      Move some things from builtins.h to new header files · f21a563d
      Peter Eisentraut authored
      This avoids that builtins.h has to include additional header files.
      f21a563d
  2. 20 Jan, 2017 11 commits
  3. 19 Jan, 2017 13 commits
    • Tom Lane's avatar
      Fix Assert failure induced by commit 215b43cd. · d479e37e
      Tom Lane authored
      I'd somehow talked myself into believing that set_append_rel_size
      doesn't need to worry about getting back an AND clause when it applies
      eval_const_expressions to the result of adjust_appendrel_attrs (that is,
      transposing the appendrel parent's restriction clauses for one child).
      But that is nonsense, and Andreas Seltenreich's fuzz tester soon
      turned up a counterexample.  Put back the make_ands_implicit step
      that was there before, and add a regression test covering the case.
      
      Report: https://postgr.es/m/878tq6vja6.fsf@ansel.ydns.eu
      d479e37e
    • Andres Freund's avatar
      Fix platform dependant regression output triggered by 69f4b9c8. · 18220053
      Andres Freund authored
      Due to the changed costing in that commit hash-aggregates started to
      be used, which results in big-endian vs. little-endian output
      differences.  Disable hash-aggs for those tests.
      
      Author: Andres Freund, with input from Tom Lane
      Discussion: https://postgr.es/m/22891.1484791792@sss.pgh.pa.us
      18220053
    • Andres Freund's avatar
      Remove obsoleted code relating to targetlist SRF evaluation. · ea15e186
      Andres Freund authored
      Since 69f4b9c8 plain expression evaluation (and thus normal projection)
      can't return sets of tuples anymore. Thus remove code dealing with
      that possibility.
      
      This will require adjustments in external code using
      ExecEvalExpr()/ExecProject() - that should neither be hard nor very
      common.
      
      Author: Andres Freund and Tom Lane
      Discussion: https://postgr.es/m/20160822214023.aaxz5l4igypowyri@alap3.anarazel.de
      ea15e186
    • Alvaro Herrera's avatar
      Fix race condition in reading commit timestamps · 8eace46d
      Alvaro Herrera authored
      If a user requests the commit timestamp for a transaction old enough
      that its data is concurrently being truncated away by vacuum at just the
      right time, they would receive an ugly internal file-not-found error
      message from slru.c rather than the expected NULL return value.
      
      In a primary server, the window for the race is very small: the lookup
      has to occur exactly between the two calls by vacuum, and there's not a
      lot that happens between them (mostly just a multixact truncate).  In a
      standby server, however, the window is larger because the truncation is
      executed as soon as the WAL record for it is replayed, but the advance
      of the oldest-Xid is not executed until the next checkpoint record.
      
      To fix in the primary, simply reverse the order of operations in
      vac_truncate_clog.  To fix in the standby, augment the WAL truncation
      record so that the standby is aware of the new oldest-XID value and can
      apply the update immediately.  WAL version bumped because of this.
      
      No backpatch, because of the low importance of the bug and its rarity.
      
      Author: Craig Ringer
      Reviewed-By: Petr Jelínek, Peter Eisentraut
      Discussion: https://postgr.es/m/CAMsr+YFhVtRQT1VAwC+WGbbxZZRzNou=N9Ed-FrCqkwQ8H8oJQ@mail.gmail.com
      8eace46d
    • Peter Eisentraut's avatar
      initdb: Fix for mixed-case superuser names · 8b0fec93
      Peter Eisentraut authored
      The previous coding did not properly quote the user name before casting
      it to regrole.  To avoid all that, just pass in BOOTSTRAP_SUPERUSERID
      numerically.
      
      Also fix one place where the BOOTSTRAP_SUPERUSERID was hardcoded as 10.
      8b0fec93
    • Robert Haas's avatar
      Teach partitioning tests not to use DROP TABLE ... CASCADE. · c3978149
      Robert Haas authored
      This occasionally causes failures; the order in which the affected
      objects are listed is not 100% consistent.
      
      Amit Langote
      c3978149
    • Robert Haas's avatar
      Avoid some code duplication in map_partition_varattnos(). · cc144155
      Robert Haas authored
      Code to map attribute numbers in map_partition_varattnos() duplicates
      what convert_tuples_by_name_map() does.  Avoid that.
      
      Amit Langote, per a report from Álvaro Herrera.
      
      Discussion: http://postgr.es/m/9ce97382-54c8-deb3-9ee9-a2ec271d866b%40lab.ntt.co.jp
      cc144155
    • Robert Haas's avatar
      Fix some problems in check_new_partition_bound(). · 8a8afe2f
      Robert Haas authored
      Account for the fact that the highest bound less than or equal to the
      upper bound might be either the lower or the upper bound of the
      overlapping partition, depending on whether the proposed partition
      completely contains the existing partition or merely overlaps it.
      
      Also, we need not continue searching for even greater bound in
      partition_bound_bsearch() once we find the first bound that is *equal*
      to the probe, because we don't have duplicate datums.  That spends
      cycles needlessly.
      
      Amit Langote, per a report from Amul Sul.  Cosmetic changes by me.
      
      Discussion: http://postgr.es/m/CAAJ_b94XgbqVoXMyxxs63CaqWoMS1o2gpHiU0F7yGnJBnvDc_A%40mail.gmail.com
      8a8afe2f
    • Robert Haas's avatar
      Fix RETURNING to work correctly with partition tuple routing. · 05bd8899
      Robert Haas authored
      In ExecInsert(), do not switch back to the root partitioned table
      ResultRelInfo until after we finish ExecProcessReturning(), so that
      RETURNING projection is done using the partition's descriptor.  For
      the projection to work correctly, we must initialize the same for each
      leaf partition during ModifyTableState initialization.
      
      Amit Langote
      05bd8899
    • Robert Haas's avatar
      Fix failure to enforce partitioning contraint for internal partitions. · 39162b20
      Robert Haas authored
      When a tuple is inherited into a partitioning root, no partition
      constraints need to be enforced; when it is inserted into a leaf, the
      parent's partitioning quals needed to be enforced.  The previous
      coding got both of those cases right.  When a tuple is inserted into
      an intermediate level of the partitioning hierarchy (i.e. a table
      which is both a partition itself and in turn partitioned), it must
      enforce the partitioning qual inherited from its parent.  That case
      got overlooked; repair.
      
      Amit Langote
      39162b20
    • Stephen Frost's avatar
      Dump sequence data based on the TableDataInfo flag · bec96c82
      Stephen Frost authored
      When considering a sequence's Data entry in dumpSequenceData, we were
      actually looking at the sequence definition's dump flag to decide if we
      should dump the data or not.  That's generally fine, except for when the
      sequence data entry was created by processExtensionTables() because it's
      a config sequence.  In that case, the sequence itself won't be marked as
      dumping data because it's part of an extension, leading to the need for
      processExtensionTables() to create the sequence data entry.
      
      This leads to extension config sequence data not being included in the
      dump when it should be.  Fix this by looking at the sequence data's dump
      flag instead, just as dumpTableData() was doing for tables (which is why
      config tables were correctly being handled), and add a regression test
      to make sure we don't break it moving forward.
      
      All of this is a bit round-about since we can now represent which
      components of a given dump item should be dumped out through the dump
      flag.  A future improvement might be to change checkExtensionMembership()
      to check for config sequences/tables and set the dump flag based on that
      directly, possibly removing the need for processExtensionTables().
      
      Bug found by Daniele Varrazzo.
      
      Discussion: https://postgr.es/m/CA+mi_8ZmxQM7+nZ7pJ8uyfxc9V3o=UAG14dVqvftdmvw8OJ3gQ@mail.gmail.com
      
      Patch by Michael Paquier, with some tweaking of the regression tests by
      me.
      
      Back-patch to 9.6 where the bug was introduced.
      bec96c82
    • Alvaro Herrera's avatar
      Allow negative years in make_date to represent BC years · 30bcebbd
      Alvaro Herrera authored
      There doesn't seem to be any reason not to allow negative years to be
      interpreted as BC, so do that.
      
      The documentation is pretty vague on the details of this function, so
      nothing needs to change there.
      
      Reported-by: Andy Abelisto, in bug #14446
      30bcebbd
    • Andres Freund's avatar
      Adapt python regression tests to 69f4b9c8. · 8b07aee8
      Andres Freund authored
      Hopefully this'll unbreak the buildfarm.
      8b07aee8
  4. 18 Jan, 2017 14 commits
    • Tom Lane's avatar
      Doc: improve documentation of new SRF-in-tlist behavior. · f13a1277
      Tom Lane authored
      Correct a misstatement about how things used to work: we did allow nested
      SRFs before, as long as no function had more than one set-returning input.
      
      Also, attempt to document the fact that the new implementation changes the
      behavior for SRFs within conditional constructs (eg CASE): the conditional
      construct no longer gates whether the SRF is run, and thus cannot affect
      the number of rows emitted.  We might want to change this behavior, but
      first it behooves us to see if we can explain it.
      
      Minor other wordsmithing on what I wrote yesterday, too.
      
      Discussion: https://postgr.es/m/20170118214702.54b2mdbxce5piwv5@alap3.anarazel.de
      f13a1277
    • Andres Freund's avatar
      Move targetlist SRF handling from expression evaluation to new executor node. · 69f4b9c8
      Andres Freund authored
      Evaluation of set returning functions (SRFs_ in the targetlist (like SELECT
      generate_series(1,5)) so far was done in the expression evaluation (i.e.
      ExecEvalExpr()) and projection (i.e. ExecProject/ExecTargetList) code.
      
      This meant that most executor nodes performing projection, and most
      expression evaluation functions, had to deal with the possibility that an
      evaluated expression could return a set of return values.
      
      That's bad because it leads to repeated code in a lot of places. It also,
      and that's my (Andres's) motivation, made it a lot harder to implement a
      more efficient way of doing expression evaluation.
      
      To fix this, introduce a new executor node (ProjectSet) that can evaluate
      targetlists containing one or more SRFs. To avoid the complexity of the old
      way of handling nested expressions returning sets (e.g. having to pass up
      ExprDoneCond, and dealing with arguments to functions returning sets etc.),
      those SRFs can only be at the top level of the node's targetlist.  The
      planner makes sure (via split_pathtarget_at_srfs()) that SRF evaluation is
      only necessary in ProjectSet nodes and that SRFs are only present at the
      top level of the node's targetlist. If there are nested SRFs the planner
      creates multiple stacked ProjectSet nodes.  The ProjectSet nodes always get
      input from an underlying node.
      
      We also discussed and prototyped evaluating targetlist SRFs using ROWS
      FROM(), but that turned out to be more complicated than we'd hoped.
      
      While moving SRF evaluation to ProjectSet would allow to retain the old
      "least common multiple" behavior when multiple SRFs are present in one
      targetlist (i.e.  continue returning rows until all SRFs are at the end of
      their input at the same time), we decided to instead only return rows till
      all SRFs are exhausted, returning NULL for already exhausted ones.  We
      deemed the previous behavior to be too confusing, unexpected and actually
      not particularly useful.
      
      As a side effect, the previously prohibited case of multiple set returning
      arguments to a function, is now allowed. Not because it's particularly
      desirable, but because it ends up working and there seems to be no argument
      for adding code to prohibit it.
      
      Currently the behavior for COALESCE and CASE containing SRFs has changed,
      returning multiple rows from the expression, even when the SRF containing
      "arm" of the expression is not evaluated. That's because the SRFs are
      evaluated in a separate ProjectSet node.  As that's quite confusing, we're
      likely to instead prohibit SRFs in those places.  But that's still being
      discussed, and the code would reside in places not touched here, so that's
      a task for later.
      
      There's a lot of, now superfluous, code dealing with set return expressions
      around. But as the changes to get rid of those are verbose largely boring,
      it seems better for readability to keep the cleanup as a separate commit.
      
      Author: Tom Lane and Andres Freund
      Discussion: https://postgr.es/m/20160822214023.aaxz5l4igypowyri@alap3.anarazel.de
      69f4b9c8
    • Robert Haas's avatar
      Improve comment in hashsearch.c. · e37360d5
      Robert Haas authored
      Typo fix from Mithun Cy; other improvements by me.
      e37360d5
    • Tom Lane's avatar
      Reset the proper GUC in create_index test. · 1586317c
      Tom Lane authored
      Thinko in commit a4523c5a.  It doesn't really affect anything at
      present, but it would be a problem if any tests added later in this
      file ought to get index-only-scan plans.  Back-patch, like the previous
      commit, just to avoid surprises in case we add such a test and then
      back-patch it.
      
      Nikita Glukhov
      
      Discussion: https://postgr.es/m/8b70135d-ad38-bdd8-ac92-71e2b3c273cf@postgrespro.ru
      1586317c
    • Alvaro Herrera's avatar
      Change some test macros to return true booleans · 594e61a1
      Alvaro Herrera authored
      These macros work fine when they are used directly in an "if" test or
      similar, but as soon as the return values are assigned to boolean
      variables (or passed as boolean arguments to some function), they become
      bugs, hopefully caught by compiler warnings.  To avoid future problems,
      fix the definitions so that they return actual booleans.
      
      To further minimize the risk that somebody uses them in back-patched
      fixes that only work correctly in branches starting from the current
      master and not in old ones, back-patch the change to supported branches
      as appropriate.
      
      See also commit af4472bc, and the long
      discussion (and larger patch) in the thread mentioned in its commit
      message.
      
      Discussion: https://postgr.es/m/18672.1483022414@sss.pgh.pa.us
      594e61a1
    • Magnus Hagander's avatar
      Implement array version of jsonb_delete and operator · d00ca333
      Magnus Hagander authored
      This makes it possible to delete multiple keys from a jsonb value by
      passing in an array of text values, which makes the operaiton much
      faster than individually deleting the keys (which would require copying
      the jsonb structure over and over again.
      
      Reviewed by Dmitry Dolgov and Michael Paquier
      d00ca333
    • Tom Lane's avatar
      Disable transforms that replaced AT TIME ZONE with RelabelType. · c22ecc65
      Tom Lane authored
      These resulted in wrong answers if the relabeled argument could be matched
      to an index column, as shown in bug #14504 from Evgeniy Kozlov.  We might
      be able to resurrect these optimizations by adjusting the planner's
      treatment of RelabelType, or by adjusting btree's rules for selecting
      comparison functions, but either solution will take careful analysis
      and does not sound like a fit candidate for backpatching.
      
      I left the catalog infrastructure in place and just reduced the transform
      functions to always-return-NULL.  This would be necessary anyway in the
      back branches, and it doesn't seem important to be more invasive in HEAD.
      
      Bug introduced by commit b8a18ad4.  Back-patch to 9.5 where that came in.
      
      Report: https://postgr.es/m/20170118144828.1432.52823@wrigleys.postgresql.org
      Discussion: https://postgr.es/m/18771.1484759439@sss.pgh.pa.us
      c22ecc65
    • Robert Haas's avatar
      Avoid use of DROP TABLE .. CASCADE in partitioning tests. · e509e7f9
      Robert Haas authored
      This isn't really guaranteed to always produce exactly the same
      output; the order can change from run to run.
      
      See related cleanup in 257d8157.
      e509e7f9
    • Robert Haas's avatar
      Add some more tests for tuple routing. · d26fa4fd
      Robert Haas authored
      Commit a2566508 fixed some issues with
      how PartitionDispatch related code handled multi-level partitioned
      tables, but didn't add any tests.
      
      Discussion: http://postgr.es/m/CA%2BTgmoZ86v1G%2Bzx9etMiSQaBBvYMKfU-iitqZArSh5z0n8Q4cA%40mail.gmail.com
      
      Amit Langote, per a complaint from me.
      d26fa4fd
    • Robert Haas's avatar
      Update information_schema queries and system views for new relkind. · 262e821d
      Robert Haas authored
      The original table partitioning patch overlooked this.
      
      Discussion: http://postgr.es/m/CAG1_KcDJiZB=L6yOUO_bVufj2q2851_xdkfhw0JdcD_2VtKssw@mail.gmail.com
      
      Keith Fiske and Amit Langote, adjusted by me.
      262e821d
    • Alvaro Herrera's avatar
      Make messages mentioning type names more uniform · 9a34123b
      Alvaro Herrera authored
      This avoids additional translatable strings for each distinct type, as
      well as making our quoting style around type names more consistent
      (namely, that we don't quote type names).  This continues what started
      as f402b995.
      
      Discussion: https://postgr.es/m/20160401170642.GA57509@alvherre.pgsql
      9a34123b
    • Robert Haas's avatar
      Factor out logic for computing number of parallel workers. · 716c7d4b
      Robert Haas authored
      Forthcoming patches to allow other types of parallel scans will
      need this logic, or something like it.
      
      Dilip Kumar
      716c7d4b
    • Tom Lane's avatar
      Avoid conflicts with collation aliases generated by stripping. · 0333a734
      Tom Lane authored
      This resulted in failures depending on the order of "locale -a" output.
      The original coding in initdb sorted the results, but that should be
      unnecessary as long as "locale -a" doesn't print duplicate names.  The
      original entries will then all be non-dups, and while we might generate
      duplicate aliases by stripping, they should be for different encodings and
      thus not conflict.  Even if the latter assumption fails somehow, it won't
      be fatal because we're using if_not_exists mode for the aliases.
      
      Discussion: https://postgr.es/m/26116.1484751196%40sss.pgh.pa.us
      0333a734
    • Tom Lane's avatar
      Improve RLS planning by marking individual quals with security levels. · 215b43cd
      Tom Lane authored
      In an RLS query, we must ensure that security filter quals are evaluated
      before ordinary query quals, in case the latter contain "leaky" functions
      that could expose the contents of sensitive rows.  The original
      implementation of RLS planning ensured this by pushing the scan of a
      secured table into a sub-query that it marked as a security-barrier view.
      Unfortunately this results in very inefficient plans in many cases, because
      the sub-query cannot be flattened and gets planned independently of the
      rest of the query.
      
      To fix, drop the use of sub-queries to enforce RLS qual order, and instead
      mark each qual (RestrictInfo) with a security_level field establishing its
      priority for evaluation.  Quals must be evaluated in security_level order,
      except that "leakproof" quals can be allowed to go ahead of quals of lower
      security_level, if it's helpful to do so.  This has to be enforced within
      the ordering of any one list of quals to be evaluated at a table scan node,
      and we also have to ensure that quals are not chosen for early evaluation
      (i.e., use as an index qual or TID scan qual) if they're not allowed to go
      ahead of other quals at the scan node.
      
      This is sufficient to fix the problem for RLS quals, since we only support
      RLS policies on simple tables and thus RLS quals will always exist at the
      table scan level only.  Eventually these qual ordering rules should be
      enforced for join quals as well, which would permit improving planning for
      explicit security-barrier views; but that's a task for another patch.
      
      Note that FDWs would need to be aware of these rules --- and not, for
      example, send an insecure qual for remote execution --- but since we do
      not yet allow RLS policies on foreign tables, the case doesn't arise.
      This will need to be addressed before we can allow such policies.
      
      Patch by me, reviewed by Stephen Frost and Dean Rasheed.
      
      Discussion: https://postgr.es/m/8185.1477432701@sss.pgh.pa.us
      215b43cd