1. 26 Sep, 2018 7 commits
    • Tom Lane's avatar
      Incorporate strerror_r() into src/port/snprintf.c, too. · 758ce9b7
      Tom Lane authored
      This provides the features that used to exist in useful_strerror()
      for users of strerror_r(), too.  Also, standardize on the GNU convention
      that strerror_r returns a char pointer that may not be NULL.
      
      I notice that libpq's win32.c contains a variant version of strerror_r
      that probably ought to be folded into strerror.c.  But lacking a
      Windows environment, I should leave that to somebody else.
      
      Discussion: https://postgr.es/m/2975.1526862605@sss.pgh.pa.us
      758ce9b7
    • Tom Lane's avatar
      Convert elog.c's useful_strerror() into a globally-used strerror wrapper. · 26e9d4d4
      Tom Lane authored
      elog.c has long had a private strerror wrapper that handles assorted
      possible failures or deficiencies of the platform's strerror.  On Windows,
      it also knows how to translate Winsock error codes, which the native
      strerror does not.  Move all this code into src/port/strerror.c and
      define strerror() as a macro that invokes it, so that both our frontend
      and backend code will have all of this behavior.
      
      I believe this constitutes an actual bug fix on Windows, since AFAICS
      our frontend code did not report Winsock error codes properly before this.
      However, the main point is to lay the groundwork for implementing %m
      in src/port/snprintf.c: the behavior we want %m to have is this one,
      not the native strerror's.
      
      Note that this throws away the prior use of src/port/strerror.c,
      which was to implement strerror() on platforms lacking it.  That's
      been dead code for nigh twenty years now, since strerror() was
      already required by C89.
      
      We should likewise cause strerror_r to use this behavior, but
      I'll tackle that separately.
      
      Patch by me, reviewed by Michael Paquier
      
      Discussion: https://postgr.es/m/2975.1526862605@sss.pgh.pa.us
      26e9d4d4
    • Peter Eisentraut's avatar
      Update dummy CREATE ASSERTION grammar · a49ceda6
      Peter Eisentraut authored
      While we are probably still far away from fully implementing
      assertions, all patch proposals appear to take issue with the existing
      dummy grammar CREATE/DROP ASSERTION productions, so update those a
      little bit.  Rename the rule, use any_name instead of name, and remove
      some unused code.  Also remove the production for DROP ASSERTION,
      since that would most likely be handled via the generic DROP support.
      
      extracted from a patch by Joe Wildish
      a49ceda6
    • Tomas Vondra's avatar
      Improve test coverage of geometric types · a3d28448
      Tomas Vondra authored
      This commit significantly increases test coverage of geo_ops.c, adding
      tests for various issues addressed by 2e2a392d (which went undetected
      for a long time, at least partially due to not being covered).
      
      This also removes alternative results expecting -0 on some platforms.
      Instead the functions are should return the same results everywhere,
      transforming -0 to 0 if needed.
      
      The tests are added to geometric.sql file, sorted by the left hand side
      of the operators. There are many cross datatype operators, so this seems
      like the best solution.
      
      Author: Emre Hasegeli
      Reviewed-by: Tomas Vondra
      
      Discussion: https://www.postgresql.org/message-id/CAE2gYzxF7-5djV6-cEvqQu-fNsnt%3DEqbOURx7ZDg%2BVv6ZMTWbg%40mail.gmail.com
      a3d28448
    • Tomas Vondra's avatar
      Fix problems in handling the line data type · 2e2a392d
      Tomas Vondra authored
      According to the source history, the internal format of line data type
      has changed, but various functions working with it did were not updated
      and thus were producing wrong results.
      
      This patch addresses various such issues, in particular:
      
      * Reject invalid specification A=B=0 on receive
      * Reject same points on line_construct_pp()
      * Fix perpendicular operator when negative values are involved
      * Avoid division by zero on perpendicular operator
      * Fix intersection and distance operators when neither A nor B are 1
      * Return NULL for closest point when objects are parallel
      * Check whether closest point of line segments is the intersection point
      * Fix closest point of line segments being on the wrong segment
      
      Aside from handling those issues, the patch also aims to make operators
      more symmetric and less sen to precision loss.  The EPSILON interferes
      with even minor changes, but the least we can do is applying it to both
      sides of the operators equally.
      
      Author: Emre Hasegeli
      Reviewed-by: Tomas Vondra
      
      Discussion: https://www.postgresql.org/message-id/CAE2gYzxF7-5djV6-cEvqQu-fNsnt%3DEqbOURx7ZDg%2BVv6ZMTWbg%40mail.gmail.com
      2e2a392d
    • Michael Paquier's avatar
      Add basic regression tests for default monitoring roles · f535d5f0
      Michael Paquier authored
      The following default roles gain some coverage:
      - pg_read_all_stats
      - pg_read_all_settings
      
      Author: Alexandra Ryzhevich
      Discussion: https://postgr.es/m/CAOt4E5S5WJmDc9YpS1BfyAMQ5C1NEmiYynD6nUz42qVxphqkpA@mail.gmail.com
      f535d5f0
    • Michael Paquier's avatar
      Rework activation of commit timestamps during recovery · 8d28bf50
      Michael Paquier authored
      The activation and deactivation of commit timestamp tracking has not
      been handled consistently for a primary or standbys at recovery.  The
      facility can be activated at three different moments of recovery:
      - The beginning, where a primary would use the GUC value for the
      decision-making, and where a standby relies on the contents of the
      control file.
      - When replaying a XLOG_PARAMETER_CHANGE record at redo.
      - The end, where both primary and standby rely on the GUC value.
      
      Using the GUC value for a primary at the beginning of recovery causes
      problems with commit timestamp access when doing crash recovery.
      Particularly, when replaying transaction commits, it could be possible
      that an attempt to read commit timestamps is done for a transaction
      which committed at a moment when track_commit_timestamp was disabled.
      
      A test case is added to reproduce the failure.  The test works down to
      v11 as it takes advantage of transaction commits within procedures.
      
      Reported-by: Hailong Li
      Author: Masahiko Sawasa, Michael Paquier
      Reviewed-by: Kyotaro Horiguchi
      Discussion: https://postgr.es/m/11224478-a782-203b-1f17-e4797b39bdf0@qunar.com
      Backpatch-through: 9.5, where commit timestamps have been introduced.
      8d28bf50
  2. 25 Sep, 2018 12 commits
    • Andres Freund's avatar
      Remove absolete function TupleDescGetSlot(). · 10763358
      Andres Freund authored
      TupleDescGetSlot() was kept around for backward compatibility for
      user-written SRFs. With the TupleTableSlot abstraction work, that code
      will need to be version specific anyway, so there's no point in
      keeping the function around any longer.
      
      Author: Ashutosh Bapat
      Reviewed-By: Andres Freund
      Discussion: https://postgr.es/m/20180220224318.gw4oe5jadhpmcdnm@alap3.anarazel.de
      10763358
    • Andres Freund's avatar
      Split ExecStoreTuple into ExecStoreHeapTuple and ExecStoreBufferHeapTuple. · 29c94e03
      Andres Freund authored
      Upcoming changes introduce further types of tuple table slots, in
      preparation of making table storage pluggable. New storage methods
      will have different representation of tuples, therefore the slot
      accessor should refer explicitly to heap tuples.
      
      Instead of just renaming the functions, split it into one function
      that accepts heap tuples not residing in buffers, and one accepting
      ones in buffers.  Previously one function was used for both, but that
      was a bit awkward already, and splitting will allow us to represent
      slot types for tuples in buffers and normal memory separately.
      
      This is split out from the patch introducing abstract slots, as this
      largely consists out of mechanical changes.
      
      Author: Ashutosh Bapat
      Reviewed-By: Andres Freund
      Discussion: https://postgr.es/m/20180220224318.gw4oe5jadhpmcdnm@alap3.anarazel.de
      29c94e03
    • Andres Freund's avatar
      Remove function list from prologue of execTuples.c. · bbdfbb91
      Andres Freund authored
      That section is never in sync with the actual routines available and
      their functionality.
      
      Author: Ashutosh Bapat
      Discussion: https://postgr.es/m/20180220224318.gw4oe5jadhpmcdnm@alap3.anarazel.de
      bbdfbb91
    • Andres Freund's avatar
      Change TupleTableSlot->tts_nvalid to type AttrNumber. · a598708f
      Andres Freund authored
      Previously it was an int / 4 bytes. The maximum number of attributes
      in a tuple is restricted by the maximum value Var->varattno, which is
      an AttrNumber/int16. Hence use the same data type for
      TupleTableSlot->tts_nvalid.
      
      Author: Ashutosh Bapat
      Discussion: https://postgr.es/m/20180220224318.gw4oe5jadhpmcdnm@alap3.anarazel.de
      a598708f
    • Alvaro Herrera's avatar
      Remove obsolete comment · 5913b9bb
      Alvaro Herrera authored
      The documented shortcoming was actually fixed in 4c728f38
      so the comment is not true anymore.
      5913b9bb
    • Alvaro Herrera's avatar
      Remove fmgr.h inclusion from partition.h · 62e533d3
      Alvaro Herrera authored
      It's not needed anymore.
      62e533d3
    • Andres Freund's avatar
      Collect JIT instrumentation from workers. · 33001fd7
      Andres Freund authored
      Previously, when using parallel query, EXPLAIN (ANALYZE)'s JIT
      compilation timings did not include the overhead from doing so on the
      workers.  Fix that.
      
      We do so by simply aggregating the cost of doing JIT compilation on
      workers and the leader together. Arguably that's not quite accurate,
      because the total time spend doing so is spent in parallel - but it's
      hard to do much better.  For additional detail, when VERBOSE is
      specified, the stats for workers are displayed separately.
      
      Author: Amit Khandekar and Andres Freund
      Discussion: https://postgr.es/m/CAJ3gD9eLrz51RK_gTkod+71iDcjpB_N8eC6vU2AW-VicsAERpQ@mail.gmail.com
      Backpatch: 11-
      33001fd7
    • Tom Lane's avatar
      Make some fixes to allow building Postgres on macOS 10.14 ("Mojave"). · 5e221713
      Tom Lane authored
      Apple's latest rearrangements of the system-supplied headers have broken
      building of PL/Perl and PL/Tcl.  The only practical way to fix PL/Tcl is to
      start using the "-isysroot" compiler flag to point to SDK-supplied headers,
      as Apple expects.  We must also start distinguishing where to find Perl's
      headers from where to find its shared library; but that seems like good
      cleanup anyway.
      
      Extensions that formerly did something like -I$(perl_archlibexp)/CORE
      should now do -I$(perl_includedir)/CORE instead.  perl_archlibexp
      is still the place to look for libperl.so, though.
      
      If for some reason you don't like the default -isysroot setting, you can
      override that by setting PG_SYSROOT in configure's arguments.  I don't
      currently think people would need to do so, unless maybe for cross-version
      build purposes.
      
      In addition, teach configure where to find tclConfig.sh.  Our traditional
      method of searching $auto_path hasn't worked for the last couple of macOS
      releases, and it now seems clear that Apple's not going to change that.
      The workaround of manually specifying --with-tclconfig was annoying
      already, but Mojave's made it a lot more so because the sysroot path now
      has to be included as well.  Let's just wire the knowledge into configure
      instead.  To avoid breaking builds against non-default Tcl installations
      (e.g. MacPorts) wherein the $auto_path method probably still works,
      arrange to try the additional case only after all else has failed.
      
      Back-patch to all supported versions, since at least the buildfarm
      cares about that.  The changes are set up to not do anything on macOS
      releases that are old enough to not have functional sysroot trees.
      5e221713
    • Tom Lane's avatar
      Avoid unnecessary precision loss for pgbench's --rate target. · 5b7e0367
      Tom Lane authored
      It's fairly silly to truncate the throttle_delay to integer when the only
      math we ever do with it requires converting back to double.  Furthermore,
      given that people are starting to complain about restrictions like only
      supporting 1K client connections, I don't think we're very far away from
      situations where the precision loss matters.  As the code stood, for
      example, there's no difference between --rate 100001 and --rate 111111;
      both get converted to throttle_delay = 9.  Somebody trying to run 100
      threads and have each one dispatch around 1K TPS would find this lack of
      precision rather surprising, especially since the required per-thread
      delays are around 1ms, well within the timing precision of modern systems.
      5b7e0367
    • Thomas Munro's avatar
    • Michael Paquier's avatar
      Ignore publication tables when --no-publications is used · 08c9917e
      Michael Paquier authored
      96e1cb4c has added support for --no-publications in pg_dump, pg_dumpall
      and pg_restore, but forgot the fact that publication tables also need to
      be ignored when this option is used.
      
      Author: Gilles Darold
      Reviewed-by: Michael Paquier
      Discussion: https://postgr.es/m/3f48e812-b0fa-388e-2043-9a176bdee27e@dalibo.com
      Backpatch-through: 10, where publications have been added.
      08c9917e
    • Michael Paquier's avatar
      Revoke pg_stat_statements_reset() permissions · edb97976
      Michael Paquier authored
      Commit 25fff407 has granted execute permission of the function
      pg_stat_statements_reset() to default role "pg_read_all_stats", but this
      role is meant to read statistics, and not to reset them.  The
      permissions on this function are revoked from "pg_read_all_stats".  The
      version of pg_stat_statements is bumped up in consequence.
      
      Author: Haribabu Kommi
      Reviewed-by: Michael Paquier, Amit Kapila
      Discussion: https://postgr.es/m/CAJrrPGf5fCnKqXObpwGN9nMyD--tzOf-7LFCJiz59Z1wJ5qj9A@mail.gmail.com
      edb97976
  3. 24 Sep, 2018 8 commits
    • Tom Lane's avatar
      Sync our Snowball stemmer dictionaries with current upstream. · fd582317
      Tom Lane authored
      We haven't touched these since text search functionality landed in core
      in 2007 :-(.  While the upstream project isn't a beehive of activity,
      they do make additions and bug fixes from time to time.  Update our
      copies of these files.
      
      Also update our documentation about how to keep things in sync, since
      they're not making distribution tarballs these days.  Fortunately,
      their source code turns out to be a breeze to build.
      
      Notable changes:
      
      * The non-UTF8 version of the hungarian stemmer now works in LATIN2
      not LATIN1.
      
      * New stemmers have appeared for arabic, indonesian, irish, lithuanian,
      nepali, and tamil.  These all work in UTF8, and the indonesian and
      irish ones also work in LATIN1.
      
      (There are some new stemmers that I did not incorporate, mainly because
      their names don't match the underlying languages, suggesting that they're
      not to be considered mainstream.)
      
      Worth noting: the upstream Nepali dictionary was contributed by
      Arthur Zakirov.
      
      initdb forced because the contents of snowball_create.sql have
      changed.
      
      Still TODO: see about updating the stopword lists.
      
      Arthur Zakirov, minor mods and doc work by me
      
      Discussion: https://postgr.es/m/20180626122025.GA12647@zakirov.localdomain
      Discussion: https://postgr.es/m/20180219140849.GA9050@zakirov.localdomain
      fd582317
    • Andres Freund's avatar
      auto_explain: Include JIT information if applicable. · b076eb76
      Andres Freund authored
      Due to my (Andres') omission auto_explain did not include information
      about JIT compilation. Fix that.
      
      Author: Lukas Fittl
      Discussion:
      https://postgr.es/m/CAP53PkzgSyoTCau0-5FNaM484B=uO8nLzma7L1ncWLb1=oVJQA@mail.gmail.com
      Backpatch: 11-, where JIT compilation was introduced
      b076eb76
    • Andres Freund's avatar
      Make EXPLAIN output for JIT compilation more dense. · 52050ad8
      Andres Freund authored
      A discussion about also reporting JIT compilation overhead on workers
      brought unhappiness with the verbosity of the current explain format
      to light.  Make the text format more dense, and restructure the
      structured output to mirror that more closely.
      
      As we're re-jiggering the output format anyway: The denser format
      allows us to report all flags for JIT compilation (now also reporting
      PGJIT_EXPR and PGJIT_DEFORM), and report the total time in addition to
      the individual times.
      
      Per complaint from Tom Lane.
      
      Author: Andres Freund
      Discussion: https://postgr.es/m/27812.1537221015@sss.pgh.pa.us
      Backpatch: 11-, where JIT compilation was introduced
      52050ad8
    • Andrew Dunstan's avatar
      Fast default trigger and expand_tuple fixes · 7636e5c6
      Andrew Dunstan authored
      Ensure that triggers get properly filled in tuples for the OLD value.
      Also fix the logic of detecting missing null values. The previous logic
      failed to detect a missing null column before the first missing column
      with a default. Fixing this has simplified the logic a bit.
      
      Regression tests are added to test changes. This should ensure better
      coverage of expand_tuple().
      
      Original bug reports, and some code and test scripts from Tomas Vondra
      
      Backpatch to release 11.
      7636e5c6
    • Tom Lane's avatar
      Use ppoll(2), if available, to wait for input in pgbench. · 60e612b6
      Tom Lane authored
      Previously, pgbench always used select(2) for this purpose, but that's
      problematic for very high client counts, because select() can't deal
      with file descriptor numbers larger than FD_SETSIZE.  It's pretty common
      for that to be only 1024 or so, whereas modern OSes can allow many more
      open files than that.  Using poll(2) would surmount that problem, but it
      creates another one: poll()'s timeout resolution is only 1ms, which is
      poor enough to cause problems with --rate specifications approaching or
      exceeding 1K TPS.
      
      On platforms that have ppoll(2), which includes Linux and recent
      FreeBSD, we can use that to avoid the FD_SETSIZE problem without any
      loss of timeout resolution.  Hence, add configure logic to test for
      ppoll(), and use it if available.
      
      This patch introduces an abstraction layer into pgbench that could
      be extended to support other kernel event-wait APIs such as kevents.
      But actually adding such support is a matter for some future patch.
      
      Doug Rady, reviewed by Robert Haas and Fabien Coelho, and whacked around
      a good bit more by me
      
      Discussion: https://postgr.es/m/23D017C9-81B7-484D-8490-FD94DEC4DF59@amazon.com
      60e612b6
    • Tom Lane's avatar
      Fix over-allocation of space for array_out()'s result string. · 87d9bbca
      Tom Lane authored
      array_out overestimated the space needed for its output, possibly by
      a very substantial amount if the array is multi-dimensional, because
      of wrong order of operations in the loop that counts the number of
      curly-brace pairs needed.  While the output string is normally
      short-lived, this could still cause problems in extreme cases.
      
      An additional minor error was that it counted one more delimiter than
      is actually needed.
      
      Repair those errors, add an Assert that the space is now correctly
      calculated, and make some minor improvements in the comments.
      
      I also failed to resist the temptation to get rid of an integer
      modulus operation per array element; a simple comparison is sufficient.
      
      This bug dates clear back to Berkeley days, so back-patch to all
      supported versions.
      
      Keiichi Hirobe, minor additional work by me
      
      Discussion: https://postgr.es/m/CAH=EFxE9W0tRvQkixR2XJRRCToUYUEDkJZk6tnADXugPBRdcdg@mail.gmail.com
      87d9bbca
    • Joe Conway's avatar
      Document aclitem functions and operators · c62dd80c
      Joe Conway authored
      aclitem functions and operators have been heretofore undocumented.
      Fix that. While at it, ensure the non-operator aclitem functions have
      pg_description strings.
      
      Does not seem worthwhile to back-patch.
      
      Author: Fabien Coelho, with pg_description from John Naylor, and significant
      refactoring and editorialization by me.
      Reviewed by: Tom Lane
      Discussion: https://postgr.es/m/flat/alpine.DEB.2.21.1808010825490.18204%40lancre
      c62dd80c
    • Noah Misch's avatar
      Initialize random() in bootstrap/stand-alone postgres and in initdb. · d18f6674
      Noah Misch authored
      This removes a difference between the standard IsUnderPostmaster
      execution environment and that of --boot and --single.  In a stand-alone
      backend, "SELECT random()" always started at the same seed.
      
      On a system capable of using posix shared memory, initdb could still
      conclude "selecting dynamic shared memory implementation ... sysv".
      Crashed --boot or --single postgres processes orphaned shared memory
      objects having names that collided with the not-actually-random names
      that initdb probed.  The sysv fallback appeared after ten crashes of
      --boot or --single postgres.  Since --boot and --single are rare in
      production use, systems used for PostgreSQL development are the
      principal candidate to notice this symptom.
      
      Back-patch to 9.3 (all supported versions).  PostgreSQL 9.4 introduced
      dynamic shared memory, but 9.3 does share the "SELECT random()" problem.
      
      Reviewed by Tom Lane and Kyotaro HORIGUCHI.
      
      Discussion: https://postgr.es/m/20180915221546.GA3159382@rfd.leadboat.com
      d18f6674
  4. 23 Sep, 2018 2 commits
    • Tom Lane's avatar
      Doc: warn against using parallel restore with --load-via-partition-root. · 73a60051
      Tom Lane authored
      This isn't terribly safe, and making it so doesn't seem like a small
      project, so for the moment just warn against it.
      
      Discussion: https://postgr.es/m/13624.1535486019@sss.pgh.pa.us
      73a60051
    • Tom Lane's avatar
      Fix failure in WHERE CURRENT OF after rewinding the referenced cursor. · 89b280e1
      Tom Lane authored
      In a case where we have multiple relation-scan nodes in a cursor plan,
      such as a scan of an inheritance tree, it's possible to fetch from a
      given scan node, then rewind the cursor and fetch some row from an
      earlier scan node.  In such a case, execCurrent.c mistakenly thought
      that the later scan node was still active, because ExecReScan hadn't
      done anything to make it look not-active.  We'd get some sort of
      failure in the case of a SeqScan node, because the node's scan tuple
      slot would be pointing at a HeapTuple whose t_self gets reset to
      invalid by heapam.c.  But it seems possible that for other relation
      scan node types we'd actually return a valid tuple TID to the caller,
      resulting in updating or deleting a tuple that shouldn't have been
      considered current.  To fix, forcibly clear the ScanTupleSlot in
      ExecScanReScan.
      
      Another issue here, which seems only latent at the moment but could
      easily become a live bug in future, is that rewinding a cursor does
      not necessarily lead to *immediately* applying ExecReScan to every
      scan-level node in the plan tree.  Upper-level nodes will think that
      they can postpone that call if their child node is already marked
      with chgParam flags.  I don't see a way for that to happen today in
      a plan tree that's simple enough for execCurrent.c's search_plan_tree
      to understand, but that's one heck of a fragile assumption.  So, add
      some logic in search_plan_tree to detect chgParam flags being set on
      nodes that it descended to/through, and assume that that means we
      should consider lower scan nodes to be logically reset even if their
      ReScan call hasn't actually happened yet.
      
      Per bug #15395 from Matvey Arye.  This has been broken for a long time,
      so back-patch to all supported branches.
      
      Discussion: https://postgr.es/m/153764171023.14986.280404050547008575@wrigleys.postgresql.org
      89b280e1
  5. 22 Sep, 2018 4 commits
  6. 21 Sep, 2018 7 commits