1. 29 Mar, 2016 15 commits
    • Robert Haas's avatar
      Allow aggregate transition states to be serialized and deserialized. · 5fe5a2ce
      Robert Haas authored
      This is necessary infrastructure for supporting parallel aggregation
      for aggregates whose transition type is "internal".  Such values
      can't be passed between cooperating processes, because they are
      just pointers.
      
      David Rowley, reviewed by Tomas Vondra and by me.
      5fe5a2ce
    • Robert Haas's avatar
      Improve pgbench docs regarding per-transaction logging. · 7f0a2c85
      Robert Haas authored
      The old documentation didn't know about the new -b flag, only about -f.
      
      Fabien Coelho
      7f0a2c85
    • Robert Haas's avatar
      Fix pgbench documentation error. · d797bf7d
      Robert Haas authored
      The description of what the per-transaction log file says for skipped
      transactions is just plain wrong.
      
      Report and patch by Tomas Vondra, reviewed by Fabien Coelho and
      modified by me.
      d797bf7d
    • Alvaro Herrera's avatar
      pgbench: allow a script weight of zero · a1c935d3
      Alvaro Herrera authored
      This refines the previous weight range and allows a script to be "turned
      off" by passing a zero weight, which is useful when scripting multiple
      pgbench runs.
      
      I did not apply the suggested warning when a script uses zero weight; we
      use the principle elsewhere that if there's nothing to be done, do
      nothing quietly.
      
      Adjust docs accordingly.
      
      Author: Jeff Janes, Fabien Coelho
      a1c935d3
    • Robert Haas's avatar
      pgbench: Remove \setrandom. · ad956647
      Robert Haas authored
      You can now do the same thing via \set using the appropriate function,
      either random(), random_gaussian(), or random_exponential(), depending
      on the desired distribution.  This is not backward-compatible, but per
      discussion, it's worth it to avoid having the old syntax hang around
      forever.
      
      Fabien Coelho, reviewed by Michael Paquier, and adjusted by me.
      ad956647
    • Tom Lane's avatar
      Avoid possibly-unsafe use of Windows' FormatMessage() function. · 7abc1571
      Tom Lane authored
      Whenever this function is used with the FORMAT_MESSAGE_FROM_SYSTEM flag,
      it's good practice to include FORMAT_MESSAGE_IGNORE_INSERTS as well.
      Otherwise, if the message contains any %n insertion markers, the function
      will try to fetch argument strings to substitute --- which we are not
      passing, possibly leading to a crash.  This is exactly analogous to the
      rule about not giving printf() a format string you're not in control of.
      
      Noted and patched by Christian Ullrich.
      Back-patch to all supported branches.
      7abc1571
    • Teodor Sigaev's avatar
      Fix support of digits in email/hostnames. · 61d66c44
      Teodor Sigaev authored
      When tsearch was implemented I did several mistakes in hostname/email
      definition rules:
      1) allow underscore in hostname what prohibited by RFC
      2) forget to allow leading digits separated by hyphen (like 123-x.com)
         in hostname
      3) do no allow underscore/hyphen after leading digits in localpart of email
      
      Artur's patch resolves two last issues, but by the way allows hosts name like
      123_x.com together with 123-x.com. RFC forbids underscore usage in hostname
      but pg allows that since initial tsearch version in core, although only
      for non-digits. Patch syncs support digits and nondigits in both hostname and
      email.
      
      Forbidding underscore in hostname may break existsing usage of tsearch and,
      anyhow, it should be done by separate patch.
      
      Author: Artur Zakirov
      BUG: #13964
      61d66c44
    • Robert Haas's avatar
      Rework custom scans to work more like the new extensible node stuff. · f9143d10
      Robert Haas authored
      Per discussion, the new extensible node framework is thought to be
      better designed than the custom path/scan/scanstate stuff we added
      in PostgreSQL 9.5.  Rework the latter to be more like the former.
      
      This is not backward-compatible, but we generally don't promise that
      for C APIs, and there probably aren't many people using this yet
      anyway.
      
      KaiGai Kohei, reviewed by Petr Jelinek and me.  Some further
      cosmetic changes by me.
      f9143d10
    • Tom Lane's avatar
      Protect zic's symlink() call with #ifdef HAVE_SYMLINK. · 534da379
      Tom Lane authored
      The IANA crew seem to think that symlink() exists everywhere nowadays,
      and they may well be right.  But we use #ifdef HAVE_SYMLINK elsewhere
      so for consistency we should do it here too.  Noted by Michael Paquier.
      534da379
    • Tom Lane's avatar
      Fix zic for Windows. · 6d257e73
      Tom Lane authored
      The new coding of dolink() is dependent on link() returning an on-point
      errno when it fails; but the quick-hack implementation of link() that
      we'd put in for Windows didn't bother with setting errno.  Fix that.
      
      Analysis and patch by Christian Ullrich.
      6d257e73
    • Tom Lane's avatar
      Fix portability issues in 86c43f4e. · 656ee848
      Tom Lane authored
      INT64_MIN/MAX should be spelled PG_INT64_MIN/MAX, per well established
      convention in our sources.  Less obviously, a symbol named DOUBLE causes
      problems on Windows builds, so rename that to DOUBLE_CONST; and rename
      INTEGER to INTEGER_CONST for consistency.
      
      Also, get rid of incorrect/obsolete hand-munging of yycolumn, and fix
      the grammar for float constants to handle expected cases such as ".1".
      
      First two items by Michael Paquier, second two by me.
      656ee848
    • Robert Haas's avatar
      Don't require a user mapping for FDWs to work. · 5d4171d1
      Robert Haas authored
      Commit fbe5a3fb accidentally changed
      this behavior; put things back the way they were, and add some
      regression tests.
      
      Report by Andres Freund; patch by Ashutosh Bapat, with a bit of
      kibitzing by me.
      5d4171d1
    • Robert Haas's avatar
      On all Windows platforms, not just Cygwin, use _timezone and _tzname. · 868628e4
      Robert Haas authored
      Up until now, we've been using timezone and tzname, but Visual Studio
      2015 (for which we wish to add support) no longer declares those
      symbols.  All versions since Visual Studio 2003 apparently support the
      underscore-equipped names, and we don't support anything older than
      Visual Studio 2005, so this should work OK everywhere.  But let's see
      what the buildfarm thinks.
      
      Michael Paquier, reviewed by Petr Jelinek
      868628e4
    • Robert Haas's avatar
      Fix typo in comment. · bd0f206f
      Robert Haas authored
      Thomas Munro
      bd0f206f
    • Robert Haas's avatar
      pgbench: Support double constants and functions. · 86c43f4e
      Robert Haas authored
      The new functions are pi(), random(), random_exponential(),
      random_gaussian(), and sqrt().  I was worried that this would be
      slower than before, but, if anything, it actually turns out to be
      slightly faster, because we now express the built-in pgbench scripts
      using fewer lines; each \setrandom can be merged into a subsequent
      \set.
      
      Fabien Coelho
      86c43f4e
  2. 28 Mar, 2016 16 commits
    • Alvaro Herrera's avatar
      PostgresNode: initialize $timed_out if passed · 9bd61311
      Alvaro Herrera authored
      Corrects an oversight in 2c83f435 where the $timed_out reference var
      isn't initialized; using it would require the caller to initialize it
      beforehand, which is cumbersome.
      
      Author: Craig Ringer
      9bd61311
    • Alvaro Herrera's avatar
      Mention BRIN as able to do multi-column indexes · 80b986cf
      Alvaro Herrera authored
      Documentation mentioned B-tree, GiST and GIN as able to do multicolumn
      indexes; I failed to add BRIN to the list.
      
      Author: Petr Jediný
      Reviewed-By: Fujii Masao, Emre Hasegeli
      80b986cf
    • Tom Lane's avatar
      Sync tzload() and tzparse() APIs with IANA release tzcode2016c. · 1f4e9da6
      Tom Lane authored
      This brings us a bit closer to matching upstream, but since it affects
      files outside src/timezone/, we might choose not to back-patch it.
      Hence keep it separate from the main update patch.
      1f4e9da6
    • Tom Lane's avatar
      Fix MSVC build for changes in zic. · f5f15ea6
      Tom Lane authored
      zic now only needs zic.c, but I didn't realize knowledge about it was
      hardwired into Mkvcbuild.pm.  Per buildfarm.
      f5f15ea6
    • Tom Lane's avatar
      Sync our copy of the timezone library with IANA release tzcode2016c. · 1c1a7cbd
      Tom Lane authored
      We hadn't done this in about six years, which proves to have been a mistake
      because there's been a lot of code churn upstream, making the merge rather
      painful.  But putting it off any further isn't going to lessen the pain,
      and there are at least two incompatible changes that we need to absorb
      before someone starts complaining that --with-system-tzdata doesn't work
      at all on their platform, or we get blindsided by a tzdata release that
      our out-of-date zic can't compile.  Last week's "time zone abbreviation
      differs from POSIX standard" mess was a wake-up call in that regard.
      
      This is a sufficiently large patch that I'm afraid to back-patch it
      immediately, though the foregoing considerations imply that we probably
      should do so eventually.  For the moment, just put it in HEAD so that
      it can get some testing.  Maybe we can wait till the end of the 9.6
      beta cycle before deeming it okay.
      1c1a7cbd
    • Tom Lane's avatar
      Document errhidecontext() where it ought to be documented. · e5a4dea8
      Tom Lane authored
      Seems to have been missed when this function was added.  Noted while
      looking at David Steele's proposal to add another similar function.
      e5a4dea8
    • Alvaro Herrera's avatar
      Update expected file from quoting change · 4b746f0d
      Alvaro Herrera authored
      I neglected to update this in 59a2111b.
      
      Per buildfarm
      4b746f0d
    • Alvaro Herrera's avatar
      pg_rewind: Improve internationalization · cad3edef
      Alvaro Herrera authored
      This is mostly cosmetic since two of the three changes are debug
      messages, and the third one is just a progress indicator.
      
      Author: Michaël Paquier
      cad3edef
    • Alvaro Herrera's avatar
      Fix minor leak in pg_dump for ACCESS METHOD. · 37732a25
      Alvaro Herrera authored
      Bug reported by Coverity.
      
      Author: Michaël Paquier
      37732a25
    • Alvaro Herrera's avatar
      Improve internationalization of messages involving type names · 59a2111b
      Alvaro Herrera authored
      Change the slightly different variations of the message
        function FOO must return type BAR
      to a single wording, removing the variability in type name so that they
      all create a single translation entry; since the type name is not to be
      translated, there's no point in it being part of the message anyway.
      
      Also, change them all to use the same quoting convention, namely that
      the function name is not to be quoted but the type name is.  (I'm not
      quite sure why this is so, but it's the clear majority.)
      
      Some similar messages such as "encoding conversion function FOO must ..."
      are also changed.
      59a2111b
    • Teodor Sigaev's avatar
      psql tab-complete for CREATE/DROP ACCESS METHOD · 559e7a0a
      Teodor Sigaev authored
      Alexander Korotkov
      559e7a0a
    • Teodor Sigaev's avatar
      Fix comment in pg_dump. · dabd255d
      Teodor Sigaev authored
      It was missed in 473b9328,
      CREATE ACCESS METHOD
      
      Alexander Korotkov
      dabd255d
    • Tom Lane's avatar
      Last-minute updates for release notes. · 4c46f833
      Tom Lane authored
      Security: CVE-2016-2193, CVE-2016-3065
      4c46f833
    • Alvaro Herrera's avatar
      Add missing checks to some of pageinspect's BRIN functions · 3e133847
      Alvaro Herrera authored
      brin_page_type() and brin_metapage_info() did not enforce being called
      by superuser, like other pageinspect functions that take bytea do.
      Since they don't verify the passed page thoroughly, it is possible to
      use them to read the server memory with a carefully crafted bytea value,
      up to a file kilobytes from where the input bytea is located.
      
      Have them throw errors if called by a non-superuser.
      
      Report and initial patch: Andreas Seltenreich
      
      Security: CVE-2016-3065
      3e133847
    • Stephen Frost's avatar
      Reset plan->row_security_env and planUserId · 86ebf30f
      Stephen Frost authored
      In the plancache, we check if the environment we planned the query under
      has changed in a way which requires us to re-plan, such as when the user
      for whom the plan was prepared changes and RLS is being used (and,
      therefore, there may be different policies to apply).
      
      Unfortunately, while those values were set and checked, they were not
      being reset when the query was re-planned and therefore, in cases where
      we change role, re-plan, and then change role again, we weren't
      re-planning again.  This leads to potentially incorrect policies being
      applied in cases where role-specific policies are used and a given query
      is planned under one role and then executed under other roles, which
      could happen under security definer functions or when a common user and
      query is planned initially and then re-used across multiple SET ROLEs.
      
      Further, extensions which made use of CopyCachedPlan() may suffer from
      similar issues as the RLS-related fields were not properly copied as
      part of the plan and therefore RevalidateCachedQuery() would copy in the
      current settings without invalidating the query.
      
      Fix by using the same approach used for 'search_path', where we set the
      correct values in CompleteCachedPlan(), check them early on in
      RevalidateCachedQuery() and then properly reset them if re-planning.
      Also, copy through the values during CopyCachedPlan().
      
      Pointed out by Ashutosh Bapat.  Reviewed by Michael Paquier.
      
      Back-patch to 9.5 where RLS was introduced.
      
      Security: CVE-2016-2193
      86ebf30f
    • Tom Lane's avatar
      Code and docs review for commit 3187d6de. · d12e5bb7
      Tom Lane authored
      Fix up check for high-bit-set characters, which provoked "comparison is
      always true due to limited range of data type" warnings on some compilers,
      and was unlike the way we do it elsewhere anyway.  Fix omission of "$"
      from the set of valid identifier continuation characters.  Get rid of
      sanitize_text(), which was utterly inconsistent with any other error report
      anywhere in the system, and wasn't even well designed on its own terms
      (double-quoting the result string without escaping contained double quotes
      doesn't seem very well thought out).  Fix up error messages, which didn't
      follow the message style guidelines very well, and were overly specific in
      situations where the actual mistake might not be what they said.  Improve
      documentation.
      
      (I started out just intending to fix the compiler warning, but the more
      I looked at the patch the less I liked it.)
      d12e5bb7
  3. 27 Mar, 2016 8 commits
    • Tom Lane's avatar
      499a5057
    • Tom Lane's avatar
      Guard against zero vardata.rel->tuples in estimate_hash_bucketsize(). · d65b665d
      Tom Lane authored
      If the referenced rel was proven empty, we'd compute 0/0 here, which
      results in the function returning NaN.  That's a bit more serious
      than the other zero-divide case.  Still, it only seems to be possible
      in HEAD, so no back-patch.
      
      Per report from Piotr Stefaniak.  I looked through the rest of selfuncs.c
      and found no other likely trouble spots.
      d65b665d
    • Tom Lane's avatar
      Clamp adjusted ndistinct to positive integer in estimate_hash_bucketsize(). · fa09f893
      Tom Lane authored
      This avoids a possible divide-by-zero in the following calculation,
      and rounding the number to an integer seems like saner behavior anyway.
      Assuming IEEE math, the division would yield +Infinity which would get
      replaced by 1.0 at the bottom of the function, so nothing really
      interesting would ensue; but avoiding divide-by-zero seems like a
      good idea on general principles.
      
      Per report from Piotr Stefaniak.  No back-patch since this seems
      mostly cosmetic.
      fa09f893
    • Andres Freund's avatar
      pg_rewind: fsync target data directory. · 408f0438
      Andres Freund authored
      Previously pg_rewind did not fsync any files. That's problematic, given
      that the target directory is modified. If the database was started
      afterwards, 2ce439f3 luckily already caused the data directory to be
      synced to disk at postmaster startup; reducing the scope of the problem.
      
      To fix, use initdb -S, at the end of the pg_rewind run. It doesn't seem
      worthwhile to duplicate the code into pg_rewind, and initdb -S is
      already used that way by pg_upgrade.
      
      Reported-By: Andres Freund
      Author: Michael Paquier, somewhat edited by me
      Discussion: 20160310034352.iuqgvpmg5qmnxtkz@alap3.anarazel.de
          CAB7nPqSytVG1o4S3S2pA1O=692ekurJ+fckW2PywEG3sNw54Ow@mail.gmail.com
      Backpatch: 9.5, where pg_rewind was introduced
      408f0438
    • Andres Freund's avatar
      Fix LWLockReportWaitEnd() parameter list to be (void). · 9f7c527a
      Andres Freund authored
      Previously it was an "old style" function declaration.
      9f7c527a
    • Andres Freund's avatar
      pg_rewind: Close backup_label file descriptor. · a6c84594
      Andres Freund authored
      This was a relatively harmless leak, as createBackupLabel() is only
      called once per pg_rewind invocation.
      
      Author: Michael Paquier
      Reported-By: Michael Paquier
      Discussion: CAB7nPqRnOw30gOXe2_SPLjh37bgm4V+txbYAPwoXb97nGQ297w@mail.gmail.com
      Backpatch: 9.5, where pg_rewind was introduced
      a6c84594
    • Andres Freund's avatar
      Don't use !! but != 0/NULL to force boolean evaluation. · 1a7a4367
      Andres Freund authored
      I introduced several uses of !! to force bit arithmetic to be boolean,
      but per discussion the project prefers != 0/NULL.
      
      Discussion: CA+TgmoZP5KakLGP6B4vUjgMBUW0woq_dJYi0paOz-My0Hwt_vQ@mail.gmail.com
      1a7a4367
    • Andres Freund's avatar
      Change various Gin*Is* macros to return 0/1. · af4472bc
      Andres Freund authored
      Returning the direct result of bit arithmetic, in a macro intended to be
      used in a boolean manner, can be problematic if the return value is
      stored in a variable of type 'bool'. If bool is implemented using C99's
      _Bool, that can lead to comparison failures if the variable is then
      compared again with the expression (see ginStepRight() for an example
      that fails), as _Bool forces the result to be 0/1. That happens in some
      configurations of newer MSVC compilers.  It's also problematic when
      storing the result of such an expression in a narrower type.
      
      Several gin macros have been declared in that style since gin's initial
      commit in 8a3631f8.
      
      There's a lot more macros like this, but this is the only one causing
      regression test failures; and I don't want to commit and backpatch a
      larger patch with lots of conflicts just before the next set of minor
      releases.
      
      Discussion: 20150811154237.GD17575@awork2.anarazel.de
      Backpatch: All supported branches
      af4472bc
  4. 26 Mar, 2016 1 commit