1. 27 Jul, 2016 2 commits
    • Robert Haas's avatar
      Fix thinko in copyParamList. · b31875b1
      Robert Haas authored
      There's no point in consulting retval->paramMask; it's always NULL.
      Instead, we should consult from->paramMask.
      
      Reported by Andrew Gierth.
      b31875b1
    • Tom Lane's avatar
      Allow functions that return sets of tuples to return simple NULLs. · d8411a6c
      Tom Lane authored
      ExecMakeTableFunctionResult(), which is used in SELECT FROM function(...)
      cases, formerly treated a simple NULL output from a function that both
      returnsSet and returnsTuple as a violation of the SRF protocol.  What seems
      better is to treat a NULL output as equivalent to ROW(NULL,NULL,...).
      Without this, cases such as SELECT FROM unnest(...) on an array of
      composite are vulnerable to unexpected and not-very-helpful failures.
      Old code comments here suggested an alternative of just ignoring
      simple-NULL outputs, but that doesn't seem very principled.
      
      This change had been hung up for a long time due to uncertainty about
      how much we wanted to buy into the equivalence of simple NULL and
      ROW(NULL,NULL,...).  I think that's been mostly resolved by the discussion
      around bug #14235, so let's go ahead and do it.
      
      Per bug #7808 from Joe Van Dyk.  Although this is a pretty old report,
      fixing it smells a bit more like a new feature than a bug fix, and the
      lack of other similar complaints suggests that we shouldn't take much risk
      of destabilization by back-patching.  (Maybe that could be revisited once
      this patch has withstood some field usage.)
      
      Andrew Gierth and Tom Lane
      
      Report: <E1TurJE-0006Es-TK@wrigleys.postgresql.org>
      d8411a6c
  2. 26 Jul, 2016 6 commits
    • Robert Haas's avatar
      Change various deparsing functions to return NULL for invalid input. · 976b24fb
      Robert Haas authored
      Previously, some functions returned various fixed strings and others
      failed with a cache lookup error.  Per discussion, standardize on
      returning NULL.  Although user-exposed "cache lookup failed" error
      messages might normally qualify for bug-fix treatment, no back-patch;
      the risk of breaking user code which is accustomed to the current
      behavior seems too high.
      
      Michael Paquier
      976b24fb
    • Robert Haas's avatar
      Repair damage done by citext--1.1--1.2.sql. · fe5e3fce
      Robert Haas authored
      That script is incorrect in that it sets the combine function for
      max(citext) twice instead of setting the combine function for
      max(citext) once and the combine functon for min(citext) once.  The
      consequence is that if you install 1.0 or 1.1 and then update to 1.2,
      you end up with min(citext) not having a combine function, contrary to
      what was intended.  If you install 1.2 directly, you're OK.
      
      Fix things up by defining a new 1.3 version.  Upgrading from 1.2 to
      1.3 won't change anything for people who first installed the 1.2
      version, but people upgrading from 1.0 or 1.1 will get the right
      catalog contents once they reach 1.3.
      
      Report and patch by David Rowley, reviewed by Andreas Karlsson.
      fe5e3fce
    • Tom Lane's avatar
      Fix constant-folding of ROW(...) IS [NOT] NULL with composite fields. · 4452000f
      Tom Lane authored
      The SQL standard appears to specify that IS [NOT] NULL's tests of field
      nullness are non-recursive, ie, we shouldn't consider that a composite
      field with value ROW(NULL,NULL) is null for this purpose.
      ExecEvalNullTest got this right, but eval_const_expressions did not,
      leading to weird inconsistencies depending on whether the expression
      was such that the planner could apply constant folding.
      
      Also, adjust the docs to mention that IS [NOT] DISTINCT FROM NULL can be
      used as a substitute test if a simple null check is wanted for a rowtype
      argument.  That motivated reordering things so that IS [NOT] DISTINCT FROM
      is described before IS [NOT] NULL.  In HEAD, I went a bit further and added
      a table showing all the comparison-related predicates.
      
      Per bug #14235.  Back-patch to all supported branches, since it's certainly
      undesirable that constant-folding should change the semantics.
      
      Report and patch by Andrew Gierth; assorted wordsmithing and revised
      regression test cases by me.
      
      Report: <20160708024746.1410.57282@wrigleys.postgresql.org>
      4452000f
    • Fujii Masao's avatar
      Fix improper example of using psql() function in TAP tests documentation. · c1a95425
      Fujii Masao authored
      In an example of TAP test scripts, there is the test checking whether
      the result of the query is expected or not. But, in previous example,
      the exit code of psql instead of the query result was checked unexpectedly.
      
      Author: Ildar Musin
      c1a95425
    • Peter Eisentraut's avatar
      Fix typo · 43c2c404
      Peter Eisentraut authored
      43c2c404
    • Peter Eisentraut's avatar
      Message style improvements · 40fcfec8
      Peter Eisentraut authored
      40fcfec8
  3. 25 Jul, 2016 2 commits
    • Fujii Masao's avatar
      Fix typo in comment. · 1804d155
      Fujii Masao authored
      Author: Masahiko Sawada
      1804d155
    • Alvaro Herrera's avatar
      Give recovery tests more time to finish · 2a0f89cd
      Alvaro Herrera authored
      These tests are currently only running in buildfarm member hamster,
      which is purposefully very slow.  This suite has failed a couple of
      times recently because of timeouts, so increase the allowed number of
      iterations to avoid spurious failures.
      
      Author: Michaël Paquier
      2a0f89cd
  4. 24 Jul, 2016 2 commits
    • Noah Misch's avatar
      Make the AIX case of Makefile.shlib safe for parallel make. · e8564ef0
      Noah Misch authored
      Use our typical approach, from src/backend/parser.  Back-patch to 9.1
      (all supported versions).
      e8564ef0
    • Tom Lane's avatar
      Correctly set up aggregate FILTER expression in partial-aggregation plans. · 6d85bb1b
      Tom Lane authored
      The aggfilter expression should be removed from the parent (combining)
      Aggref, since it's not supposed to apply the filter, and indeed cannot
      because any Vars used in the filter would not be available after the
      lower-level aggregation step.  Per report from Jeff Janes.
      
      (This has been broken since the introduction of partial aggregation,
      I think.  The error became obvious after commit 59a3795c, when setrefs.c
      began processing the parent Aggref's fields normally and thus would detect
      such Vars.  The special-case coding previously used in setrefs.c skipped
      over the parent's aggfilter field without processing it.  That was broken
      in its own way because no other setrefs.c processing got applied either;
      though since the executor would not execute the filter expression, only
      initialize it, that oversight might not have had any visible symptoms at
      present.)
      
      Report: <CAMkU=1xfuPf2edAe4ZGXTmJpU7jxuKukKyvNtEXwu35B7dvejg@mail.gmail.com>
      6d85bb1b
  5. 22 Jul, 2016 2 commits
    • Tom Lane's avatar
      Fix regression tests to work in Welsh locale. · 9d7abca9
      Tom Lane authored
      Welsh (cy_GB) apparently sorts 'dd' after 'f', creating problems
      analogous to the odd sorting of 'aa' in Danish.  Adjust regression
      test case to not use data that provokes that.
      
      Jeff Janes
      
      Patch: <CAMkU=1zx-pqcfSApL2pYDQurPOCfcYU0wJorsmY1OrYPiXRbLw@mail.gmail.com>
      9d7abca9
    • Tom Lane's avatar
      Remove GetUserMappingId() and GetUserMappingById(). · 13bf801a
      Tom Lane authored
      These functions were added in commits fbe5a3fb and a104a017,
      but commit 45639a05 removed their only callers.  Put the related
      code in foreign.c back to the way it was in 9.5, to avoid pointless
      cross-version diffs.
      
      Etsuro Fujita
      
      Patch: <d674a3f1-6b63-519c-ef3f-f3188ed6a178@lab.ntt.co.jp>
      13bf801a
  6. 21 Jul, 2016 4 commits
    • Tom Lane's avatar
      Make contrib regression tests safe for Danish locale. · d70d1191
      Tom Lane authored
      In btree_gin and citext, avoid some not-particularly-interesting
      dependencies on the sorting of 'aa'.  In tsearch2, use COLLATE "C" to
      remove an uninteresting dependency on locale sort order (and thereby
      allow removal of a variant expected-file).
      
      Also, in citext, avoid assuming that lower('I') = 'i'.  This isn't relevant
      to Danish but it does fail in Turkish.
      d70d1191
    • Tom Lane's avatar
      Make pltcl regression tests safe for Danish locale. · 95810ed8
      Tom Lane authored
      Another peculiarity of Danish locale is that it has an unusual idea
      of how to sort upper vs. lower case.  One of the pltcl test cases has
      an issue with that.  Now that COLLATE works in all supported branches,
      we can just change the test to be locale-independent, and get rid of
      the variant expected file that used to support non-C locales.
      95810ed8
    • Tom Lane's avatar
      Make core regression tests safe for Danish locale. · b3399cb0
      Tom Lane authored
      Some tests added in 9.5 depended on 'aa' sorting before 'bb', which
      doesn't hold true in Danish.  Use slightly different test data to
      avoid the problem.
      
      Jeff Janes
      
      Report: <CAMkU=1w-cEDbA+XHdNb=YS_4wvZbs66Ni9KeSJKAJGNJyOsgQw@mail.gmail.com>
      b3399cb0
    • Robert Haas's avatar
      Remove unused structure member. · 1091402b
      Robert Haas authored
      Michael Paquier
      1091402b
  7. 20 Jul, 2016 1 commit
  8. 19 Jul, 2016 2 commits
  9. 18 Jul, 2016 6 commits
    • Tom Lane's avatar
      Stamp 9.6beta3. · b11e9bbc
      Tom Lane authored
      b11e9bbc
    • Tom Lane's avatar
      Doc: improve discussion of plpgsql's GET DIAGNOSTICS, other minor fixes. · ade64d05
      Tom Lane authored
      9.4 added a second description of GET DIAGNOSTICS that was totally
      independent of the existing one, resulting in each description lying to the
      extent that it claimed the set of status items it described was complete.
      Fix that, and do some minor markup improvement.
      
      Also some other small fixes per bug #14258 from Dilian Palauzov.
      
      Discussion: <20160718181437.1414.40802@wrigleys.postgresql.org>
      ade64d05
    • Tom Lane's avatar
      Doc: fix table of BRIN operator strategy numbers. · 82bbfc75
      Tom Lane authored
      brin-extensibility-inclusion-table was confused in places about the
      difference between strategy 4 (RTOverRight) and strategy 5 (RTRight).
      
      Alexander Law
      82bbfc75
    • Magnus Hagander's avatar
      Fix typos in comments and debug message · 55d57359
      Magnus Hagander authored
      Antonin Houska
      55d57359
    • Peter Eisentraut's avatar
      Translation updates · 7d676065
      Peter Eisentraut authored
      Source-Git-URL: git://git.postgresql.org/git/pgtranslation/messages.git
      Source-Git-Hash: 3d71988dffd3c0798a8864c55ca4b7833b48abb1
      7d676065
    • Andres Freund's avatar
      Clear all-frozen visibilitymap status when locking tuples. · eca0f1db
      Andres Freund authored
      Since a892234f & fd31cd26 the visibilitymap's freeze bit is used to
      avoid vacuuming the whole relation in anti-wraparound vacuums. Doing so
      correctly relies on not adding xids to the heap without also unsetting
      the visibilitymap flag.  Tuple locking related code has not done so.
      
      To allow selectively resetting all-frozen - to avoid pessimizing
      heap_lock_tuple - allow to selectively reset the all-frozen with
      visibilitymap_clear(). To avoid having to use
      visibilitymap_get_status (e.g. via VM_ALL_FROZEN) inside a critical
      section, have visibilitymap_clear() return whether any bits have been
      reset.
      
      There's a remaining issue (denoted by XXX): After the PageIsAllVisible()
      check in heap_lock_tuple() and heap_lock_updated_tuple_rec() the page
      status could theoretically change. Practically that currently seems
      impossible, because updaters will hold a page level pin already.  Due to
      the next beta coming up, it seems better to get the required WAL magic
      bump done before resolving this issue.
      
      The added flags field fields to xl_heap_lock and xl_heap_lock_updated
      require bumping the WAL magic. Since there's already been a catversion
      bump since the last beta, that's not an issue.
      
      Reviewed-By: Robert Haas, Amit Kapila and Andres Freund
      Author: Masahiko Sawada, heavily revised by Andres Freund
      Discussion: CAEepm=3fWAbWryVW9swHyLTY4sXVf0xbLvXqOwUoDiNCx9mBjQ@mail.gmail.com
      Backpatch: -
      eca0f1db
  10. 17 Jul, 2016 5 commits
    • Tom Lane's avatar
      Remove obsolete comment. · 65632082
      Tom Lane authored
      Peter Geoghegan
      65632082
    • Tom Lane's avatar
      Establish conventions about global object names used in regression tests. · 18555b13
      Tom Lane authored
      To ensure that "make installcheck" can be used safely against an existing
      installation, we need to be careful about what global object names
      (database, role, and tablespace names) we use; otherwise we might
      accidentally clobber important objects.  There's been a weak consensus that
      test databases should have names including "regression", and that test role
      names should start with "regress_", but we didn't have any particular rule
      about tablespace names; and neither of the other rules was followed with
      any consistency either.
      
      This commit moves us a long way towards having a hard-and-fast rule that
      regression test databases must have names including "regression", and that
      test role and tablespace names must start with "regress_".  It's not
      completely there because I did not touch some test cases in rolenames.sql
      that test creation of special role names like "session_user".  That will
      require some rethinking of exactly what we want to test, whereas the intent
      of this patch is just to hit all the cases in which the needed renamings
      are cosmetic.
      
      There is no enforcement mechanism in this patch either, but if we don't
      add one we can expect that the tests will soon be violating the convention
      again.  Again, that's not such a cosmetic change and it will require
      discussion.  (But I did use a quick-hack enforcement patch to find these
      cases.)
      
      Discussion: <16638.1468620817@sss.pgh.pa.us>
      18555b13
    • Peter Eisentraut's avatar
      doc: Supply XSLT template for superscript element in man pages · 7482fc46
      Peter Eisentraut authored
      The default is no decoration, which looks confusing, for example on the
      CREATE SEQUENCE man page.
      7482fc46
    • Peter Eisentraut's avatar
      Use correct symbol for minimum int64 value · f36ca9af
      Peter Eisentraut authored
      The old code used SEQ_MINVALUE to get the smallest int64 value.  This
      was done as a convenience to avoid having to deal with INT64_IS_BUSTED,
      but that is obsolete now.  Also, it is incorrect because the smallest
      int64 value is actually SEQ_MINVALUE-1.  Fix by using PG_INT64_MIN.
      f36ca9af
    • Stephen Frost's avatar
      Correctly dump database and tablespace ACLs · 47f5bb9f
      Stephen Frost authored
      Dump out the appropriate GRANT/REVOKE commands for databases and
      tablespaces from pg_dumpall to replicate what the current state is.
      
      This was broken during the changes to buildACLCommands for 9.6+
      servers for pg_init_privs.
      47f5bb9f
  11. 16 Jul, 2016 7 commits
    • Tom Lane's avatar
      Update 9.6 release notes through today. · fe03f289
      Tom Lane authored
      fe03f289
    • Tom Lane's avatar
      Improve test case exercising the sorting path for hash index build. · 606ccc5e
      Tom Lane authored
      On second thought, we should probably do at least a minimal check that
      the constructed index is valid, since the big problem with the most
      recent breakage was not whether the sorting was correct but that the
      index had incorrect hash codes placed in it.
      606ccc5e
    • Tom Lane's avatar
      Add regression test case exercising the sorting path for hash index build. · 9563d5b5
      Tom Lane authored
      We've broken this code path at least twice in the past, so it's prudent
      to have a test case that covers it.  To allow exercising the code path
      without creating a very large (and slow to run) test case, redefine the
      sort threshold to be bounded by maintenance_work_mem as well as the number
      of available buffers.  While at it, fix an ancient oversight that when
      building a temp index, the number of available buffers is not NBuffers but
      NLocBuffer.  Also, if assertions are enabled, apply a direct test that the
      sort actually does return the tuples in the expected order.
      
      Peter Geoghegan
      
      Patch: <CAM3SWZTBAo4hjbBd780+MrOKiKp_TMo1N3A0Rw9_im8gbD7fQA@mail.gmail.com>
      9563d5b5
    • Tom Lane's avatar
      Fix crash in close_ps() for NaN input coordinates. · 27814890
      Tom Lane authored
      The Assert() here seems unreasonably optimistic.  Andreas Seltenreich
      found that it could fail with NaNs in the input geometries, and it
      seems likely to me that it might fail in corner cases due to roundoff
      error, even for ordinary input values.  As a band-aid, make the function
      return SQL NULL instead of crashing.
      
      Report: <87d1md1xji.fsf@credativ.de>
      27814890
    • Tom Lane's avatar
      Clarify usage of clientcert authentication option. · 745513c7
      Tom Lane authored
      For some reason this option wasn't discussed at all in client-auth.sgml.
      Document it there, and be more explicit about its relationship to the
      "cert" authentication method.  Per gripe from Srikanth Venkatesh.
      
      I failed to resist the temptation to do some minor wordsmithing in the
      same area, too.
      
      Discussion: <20160713110357.1410.30407@wrigleys.postgresql.org>
      745513c7
    • Tom Lane's avatar
      Advance PG_CONTROL_VERSION. · 99dd8b05
      Tom Lane authored
      This should have been done in commit 73c986ad which added several
      new fields to pg_control, and again in commit 5028f22f which
      changed the CRC algorithm, but it wasn't.  It's far too late to fix it in
      the 9.5 branch, but let's do so in 9.6, so that if a 9.6 postmaster is
      started against a 9.4-era pg_control it will complain about a versioning
      problem rather than a CRC failure.  We already forced initdb/pg_upgrade
      for beta3, so there's no downside to doing this now.
      
      Discussion: <7615.1468598094@sss.pgh.pa.us>
      99dd8b05
    • Andres Freund's avatar
      Fix torn-page, unlogged xid and further risks from heap_update(). · bfa2ab56
      Andres Freund authored
      When heap_update needs to look for a page for the new tuple version,
      because the current one doesn't have sufficient free space, or when
      columns have to be processed by the tuple toaster, it has to release the
      lock on the old page during that. Otherwise there'd be lock ordering and
      lock nesting issues.
      
      To avoid concurrent sessions from trying to update / delete / lock the
      tuple while the page's content lock is released, the tuple's xmax is set
      to the current session's xid.
      
      That unfortunately was done without any WAL logging, thereby violating
      the rule that no XIDs may appear on disk, without an according WAL
      record.  If the database were to crash / fail over when the page level
      lock is released, and some activity lead to the page being written out
      to disk, the xid could end up being reused; potentially leading to the
      row becoming invisible.
      
      There might be additional risks by not having t_ctid point at the tuple
      itself, without having set the appropriate lock infomask fields.
      
      To fix, compute the appropriate xmax/infomask combination for locking
      the tuple, and perform WAL logging using the existing XLOG_HEAP_LOCK
      record. That allows the fix to be backpatched.
      
      This issue has existed for a long time. There appears to have been
      partial attempts at preventing dangers, but these never have fully been
      implemented, and were removed a long time ago, in
      11919160 (cf. HEAP_XMAX_UNLOGGED).
      
      In master / 9.6, there's an additional issue, namely that the
      visibilitymap's freeze bit isn't reset at that point yet. Since that's a
      new issue, introduced only in a892234f, that'll be fixed in a
      separate commit.
      
      Author: Masahiko Sawada and Andres Freund
      Reported-By: Different aspects by Thomas Munro, Noah Misch, and others
      Discussion: CAEepm=3fWAbWryVW9swHyLTY4sXVf0xbLvXqOwUoDiNCx9mBjQ@mail.gmail.com
      Backpatch: 9.1/all supported versions
      bfa2ab56
  12. 15 Jul, 2016 1 commit
    • Andres Freund's avatar
      Make HEAP_LOCK/HEAP2_LOCK_UPDATED replay reset HEAP_XMAX_INVALID. · a4d357bf
      Andres Freund authored
      0ac5ad51 started to compress infomask bits in WAL records. Unfortunately
      the replay routines for XLOG_HEAP_LOCK/XLOG_HEAP2_LOCK_UPDATED forgot to
      reset the HEAP_XMAX_INVALID (and some other) hint bits.
      
      Luckily that's not problematic in the majority of cases, because after a
      crash/on a standby row locks aren't meaningful. Unfortunately that does
      not hold true in the presence of prepared transactions. This means that
      after a crash, or after promotion, row level locks held by a prepared,
      but not yet committed, prepared transaction might not be enforced.
      
      Discussion: 20160715192319.ubfuzim4zv3rqnxv@alap3.anarazel.de
      Backpatch: 9.3, the oldest branch on which 0ac5ad51 is present.
      a4d357bf