1. 24 Sep, 2018 2 commits
    • 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
  2. 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
  3. 22 Sep, 2018 4 commits
  4. 21 Sep, 2018 7 commits
  5. 20 Sep, 2018 9 commits
    • Michael Paquier's avatar
      Remove special handling for open() in initdb for Windows · 925673f2
      Michael Paquier authored
      40cfe860 enforces the translation mode to text for all frontends, so this
      special handling in initdb is not needed anymore.
      925673f2
    • Tom Lane's avatar
      Fix psql's tab completion for TABLE. · c9a8a401
      Tom Lane authored
      This should offer the same relation types that SELECT ... FROM would.
      You can't select from an index for instance, so offering it here is
      unhelpful.  Noted while testing ilmari's recent patch.
      c9a8a401
    • Tom Lane's avatar
      Fix psql's tab completion for ALTER DATABASE ... SET TABLESPACE. · a7c4dad1
      Tom Lane authored
      We have the infrastructure to offer a list of tablespace names, but
      it wasn't being used here; instead you got "FROM", "CURRENT", and "TO"
      which aren't actually legal in this syntax.
      
      Dagfinn Ilmari Mannsåker, reviewed by Arthur Zakirov
      
      Discussion: https://postgr.es/m/d8jo9djvm7h.fsf@dalvik.ping.uio.no
      a7c4dad1
    • Tom Lane's avatar
      Add a "return" statement to pacify perlcritic. · 1dba1b61
      Tom Lane authored
      Per buildfarm member crake.
      1dba1b61
    • Tom Lane's avatar
      Add missing pg_description strings for pg_type entries. · b09a64d6
      Tom Lane authored
      I noticed that all non-composite, non-array entries in pg_type.dat
      had descr strings, except for "json" and the pseudo-types.  The
      lack for json seems certainly an oversight, and there's surely
      little reason to not have entries for the pseudo-types either.
      So add some.
      
      "make reformat-dat-files" turned up some formatting issues in
      pg_amop.dat, too, so fix those in passing.
      
      No catversion bump since the backend doesn't care too much what is
      in pg_description.
      b09a64d6
    • Tom Lane's avatar
      Teach genbki.pl to auto-generate pg_type entries for array types. · 3dc820c4
      Tom Lane authored
      This eliminates some more tedium in adding new catalog entries,
      specifically the need to set up an array type when adding a new
      built-in data type.  Now it's sufficient to assign an OID for the
      array type and write it in an "array_type_oid" metadata field.
      You don't have to fill the base type's typarray link explicitly, either.
      
      No catversion bump since the contents of pg_type aren't changed.
      (Well, their order might be different, but that doesn't matter.)
      
      John Naylor, reviewed and whacked around a bit by
      Dagfinn Ilmari Mannsåker, and some more by me.
      
      Discussion: https://postgr.es/m/CAJVSVGVTb6m9pJF49b3SuA8J+T-THO9c0hxOmoyv-yGKh-FbNg@mail.gmail.com
      3dc820c4
    • Alexander Korotkov's avatar
      Fix handling of format string text characters in to_timestamp()/to_date() · 09e99ce8
      Alexander Korotkov authored
      cf984672 introduced improvement of handling of spaces and separators in
      to_timestamp()/to_date() functions.  In particular, now we're skipping spaces
      both before and after fields.  That may cause format string text character to
      consume part of field in the situations, when it didn't happen before cf984672.
      This commit cause format string text character consume input string characters
      only when since previous field (or string beginning) number of skipped input
      string characters is not greater than number of corresponding format string
      characters (that is we didn't skip any extra characters in input string).
      09e99ce8
    • Thomas Munro's avatar
      Fix segment_bins corruption in dsa.c. · 38763d67
      Thomas Munro authored
      If a segment has been freed by dsa.c because it is entirely empty, other
      backends must make sure to unmap it before following links to new
      segments that might happen to have the same index number, or they could
      finish up looking at a defunct segment and then corrupt the segment_bins
      lists.  The correct protocol requires checking freed_segment_counter
      after acquiring the area lock and before resolving any index number to a
      segment.  Add the missing checks and an assertion.
      
      Back-patch to 10, where dsa.c first arrived.
      
      Author: Thomas Munro
      Reported-by: Tomas Vondra
      Discussion: https://postgr.es/m/CAEepm%3D0thg%2Bja5zGVa7jBy-uqyHrTqTm8HGhEOtMmigGrAqTbw%40mail.gmail.com
      38763d67
    • Thomas Munro's avatar
      Defer restoration of libraries in parallel workers. · 6c3c9d41
      Thomas Munro authored
      Several users of extensions complained of crashes in parallel workers
      that turned out to be due to syscache access from their _PG_init()
      functions.  Reorder the initialization of parallel workers so that
      libraries are restored after the caches are initialized, and inside a
      transaction.
      
      This was reported in bug #15350 and elsewhere.  We don't consider it
      to be a bug: extensions shouldn't do that, because then they can't be
      used in shared_preload_libraries.  However, it's a fairly obscure
      hazard and these extensions worked in practice before parallel query
      came along.  So let's make it work.  Later commits might add a warning
      message and eventually an error.
      
      Back-patch to 9.6, where parallel query landed.
      
      Author: Thomas Munro
      Reviewed-by: Amit Kapila
      Reported-by: Kieran McCusker, Jimmy
      Discussion: https://postgr.es/m/153512195228.1489.8545997741965926448%40wrigleys.postgresql.org
      6c3c9d41
  6. 19 Sep, 2018 3 commits
    • Michael Paquier's avatar
      Enforce translation mode for Windows frontends to text with open/fopen · 40cfe860
      Michael Paquier authored
      Allowing frontends to use concurrent-safe open() and fopen() via 0ba06e0b
      has the side-effect of switching the default translation mode from text
      to binary, so the switch can cause breakages for frontend tools when the
      caller of those new versions specifies neither binary and text.  This
      commit makes sure to maintain strict compatibility with past versions,
      so as no frontends should see a difference when upgrading.
      
      Author: Laurenz Albe
      Reviewed-by: Michael Paquier, Tom Lane
      Discussion: https://postgr.es/m/20180917140202.GF31460@paquier.xyz
      40cfe860
    • Tom Lane's avatar
      Fix minor error message style guide violation. · 0d38e4eb
      Tom Lane authored
      No periods at the ends of primary error messages, please.
      
      Daniel Gustafsson
      
      Discussion: https://postgr.es/m/43E004C0-18C6-42B4-A313-003B43EB0571@yesql.se
      0d38e4eb
    • Tom Lane's avatar
      Don't ignore locktable-full failures in StandbyAcquireAccessExclusiveLock. · 8f0de712
      Tom Lane authored
      Commit 37c54863 removed the code in StandbyAcquireAccessExclusiveLock
      that checked the return value of LockAcquireExtended.  That created a
      bug, because it's still passing reportMemoryError = false to
      LockAcquireExtended, meaning that LOCKACQUIRE_NOT_AVAIL will be returned
      if we're out of shared memory for the lock table.
      
      In such a situation, the startup process would believe it had acquired an
      exclusive lock even though it hadn't, with potentially dire consequences.
      
      To fix, just drop the use of reportMemoryError = false, which allows us
      to simplify the call into a plain LockAcquire().  It's unclear that the
      locktable-full situation arises often enough that it's worth having a
      better recovery method than crash-and-restart.  (I strongly suspect that
      the only reason the code path existed at all was that it was relatively
      simple to do in the pre-37c54863 implementation.  But now it's not.)
      
      LockAcquireExtended's reportMemoryError parameter is now dead code and
      could be removed.  I refrained from doing so, however, because there
      was some interest in resurrecting the behavior if we do get reports of
      locktable-full failures in the field.  Also, it seems unwise to remove
      the parameter concurrently with shipping commit f868a814, which added a
      parameter; if there are any third-party callers of LockAcquireExtended,
      we want them to get a wrong-number-of-parameters compile error rather
      than a possibly-silent misinterpretation of its last parameter.
      
      Back-patch to 9.6 where the bug was introduced.
      
      Discussion: https://postgr.es/m/6202.1536359835@sss.pgh.pa.us
      8f0de712
  7. 18 Sep, 2018 6 commits
    • Alexander Korotkov's avatar
      Add support for nearest-neighbor (KNN) searches to SP-GiST · 2a636834
      Alexander Korotkov authored
      Currently, KNN searches were supported only by GiST.  SP-GiST also capable to
      support them.  This commit implements that support.  SP-GiST scan stack is
      replaced with queue, which serves as stack if no ordering is specified.  KNN
      support is provided for three SP-GIST opclasses: quad_point_ops, kd_point_ops
      and poly_ops (catversion is bumped).  Some common parts between GiST and SP-GiST
      KNNs are extracted into separate functions.
      
      Discussion: https://postgr.es/m/570825e8-47d0-4732-2bf6-88d67d2d51c8%40postgrespro.ru
      Author: Nikita Glukhov, Alexander Korotkov based on GSoC work by Vlad Sterzhanov
      Review: Andrey Borodin, Alexander Korotkov
      2a636834
    • Tom Lane's avatar
      Add a debugging option to stress-test outfuncs.c and readfuncs.c. · d0cfc3d6
      Tom Lane authored
      In the normal course of operation, query trees will be serialized only if
      they are stored as views or rules; and plan trees will be serialized only
      if they get passed to parallel-query workers.  This leaves an awful lot of
      opportunity for bugs/oversights to not get detected, as indeed we've just
      been reminded of the hard way.
      
      To improve matters, this patch adds a new compile option
      WRITE_READ_PARSE_PLAN_TREES, which is modeled on the longstanding option
      COPY_PARSE_PLAN_TREES; but instead of passing all parse and plan trees
      through copyObject, it passes them through nodeToString + stringToNode.
      Enabling this option in a buildfarm animal or two will catch problems
      at least for cases that are exercised by the regression tests.
      
      A small problem with this idea is that readfuncs.c historically has
      discarded location fields, on the reasonable grounds that parse
      locations in a retrieved view are not relevant to the current query.
      But doing that in WRITE_READ_PARSE_PLAN_TREES breaks pg_stat_statements,
      and it could cause problems for future improvements that might try to
      report error locations at runtime.  To fix that, provide a variant
      behavior in readfuncs.c that makes it restore location fields when
      told to.
      
      In passing, const-ify the string arguments of stringToNode and its
      subsidiary functions, just because it annoyed me that they weren't
      const already.
      
      Discussion: https://postgr.es/m/17114.1537138992@sss.pgh.pa.us
      d0cfc3d6
    • Tom Lane's avatar
      Fix some minor issues exposed by outfuncs/readfuncs testing. · db1071d4
      Tom Lane authored
      A test patch to pass parse and plan trees through outfuncs + readfuncs
      exposed several issues that need to be fixed to get clean matches:
      
      Query.withCheckOptions failed to get copied; it's intentionally ignored
      by outfuncs/readfuncs on the grounds that it'd always be NIL anyway in
      stored rules.  This seems less than future-proof, and it's not even
      saving very much, so just undo the decision and treat the field like
      all others.
      
      Several places that convert a view RTE into a subquery RTE, or similar
      manipulations, failed to clear out fields that were specific to the
      original RTE type and should be zero in a subquery RTE.  Since readfuncs.c
      will leave such fields as zero, equalfuncs.c thinks the nodes are different
      leading to a reported mismatch.  It seems like a good idea to clear out the
      no-longer-needed fields, even though in principle nothing should look at
      them; the node ought to be indistinguishable from how it would look if
      we'd built a new node instead of scribbling on the old one.
      
      BuildOnConflictExcludedTargetlist randomly set the resname of some
      TargetEntries to "" not NULL.  outfuncs/readfuncs don't distinguish those
      cases, and so the string will read back in as NULL ... but equalfuncs.c
      does distinguish.  Perhaps we ought to try to make things more consistent
      in this area --- but it's just useless extra code space for
      BuildOnConflictExcludedTargetlist to not use NULL here, so I fixed it for
      now by making it do that.
      
      catversion bumped because the change in handling of Query.withCheckOptions
      affects stored rules.
      
      Discussion: https://postgr.es/m/17114.1537138992@sss.pgh.pa.us
      db1071d4
    • Tom Lane's avatar
      Fix some probably-minor oversights in readfuncs.c. · 09991e5a
      Tom Lane authored
      The system expects TABLEFUNC RTEs to have coltypes, coltypmods, and
      colcollations lists, but outfuncs doesn't dump them and readfuncs doesn't
      restore them.  This doesn't cause obvious failures, because the only things
      that look at those fields are expandRTE() and get_rte_attribute_type(),
      which are mostly used during parse analysis, before anything would've
      passed the parsetree through outfuncs/readfuncs.  But expandRTE() is used
      in build_physical_tlist(), which means that that function will return a
      wrong answer for a TABLEFUNC RTE that came from a view.  Very accidentally,
      this doesn't cause serious problems, because what it will return is NIL
      which callers will interpret as "couldn't build a physical tlist because
      of dropped columns".  So you still get a plan that works, though it's
      marginally less efficient than it could be.  There are also some other
      expandRTE() calls associated with transformation of whole-row Vars in
      the planner.  I have been unable to exhibit misbehavior from that, and
      it may be unreachable in any case that anyone would care about ... but
      I'm not entirely convinced, so this seems like something we should back-
      patch a fix for.  Fortunately, we can fix it without forcing a change
      of stored rules and a catversion bump, because we can just copy these
      lists from the subsidiary TableFunc object.
      
      readfuncs.c was also missing support for NamedTuplestoreScan plan nodes.
      This accidentally fails to break parallel query because a query using
      a named tuplestore would never be considered parallel-safe anyway.
      However, project policy since parallel query came in is that all plan
      node types should have outfuncs/readfuncs support, so this is clearly
      an oversight that should be repaired.
      
      Noted while fooling around with a patch to test outfuncs/readfuncs more
      thoroughly.  That exposed some other issues too, but these are the only
      ones that seem worth back-patching.
      
      Back-patch to v10 where both of these features came in.
      
      Discussion: https://postgr.es/m/17114.1537138992@sss.pgh.pa.us
      09991e5a
    • Thomas Munro's avatar
      Allow DSM allocation to be interrupted. · 422952ee
      Thomas Munro authored
      Chris Travers reported that the startup process can repeatedly try to
      cancel a backend that is in a posix_fallocate()/EINTR loop and cause it
      to loop forever.  Teach the retry loop to give up if an interrupt is
      pending.  Don't actually check for interrupts in that loop though,
      because a non-local exit would skip some clean-up code in the caller.
      
      Back-patch to 9.4 where DSM was added (and posix_fallocate() was later
      back-patched).
      
      Author: Chris Travers
      Reviewed-by: Ildar Musin, Murat Kabilov, Oleksii Kliukin
      Tested-by: Oleksii Kliukin
      Discussion: https://postgr.es/m/CAN-RpxB-oeZve_J3SM_6%3DHXPmvEG%3DHX%2B9V9pi8g2YR7YW0rBBg%40mail.gmail.com
      422952ee
    • Michael Paquier's avatar
      Refactor routines for subscription and publication lookups · 1d6fbc38
      Michael Paquier authored
      Those routines gain a missing_ok argument, allowing a caller to get a
      NULL result instead of an error if set to true.  This is part of a
      larger refactoring effort for objectaddress.c where trying to check for
      non-existing objects does not result in cache lookup failures.
      
      Author: Michael Paquier
      Reviewed-by: Aleksander Alekseev, Álvaro Herrera
      Discussion: https://postgr.es/m/CAB7nPqSZxrSmdHK-rny7z8mi=EAFXJ5J-0RbzDw6aus=wB5azQ@mail.gmail.com
      1d6fbc38
  8. 17 Sep, 2018 3 commits
    • Tom Lane's avatar
      Fix parsetree representation of XMLTABLE(XMLNAMESPACES(DEFAULT ...)). · 07a3af0f
      Tom Lane authored
      The original coding for XMLTABLE thought it could represent a default
      namespace by a T_String Value node with a null string pointer.  That's
      not okay, though; in particular outfuncs.c/readfuncs.c are not on board
      with such a representation, meaning you'll get a null pointer crash
      if you try to store a view or rule containing this construct.
      
      To fix, change the parsetree representation so that we have a NULL
      list element, instead of a bogus Value node.
      
      This isn't really a functional limitation since default XML namespaces
      aren't yet implemented in the executor; you'd just get "DEFAULT
      namespace is not supported" anyway.  But crashes are not nice, so
      back-patch to v10 where this syntax was added.  Ordinarily we'd consider
      a parsetree representation change to be un-backpatchable; but since
      existing releases would crash on the way to storing such constructs,
      there can't be any existing views/rules to be incompatible with.
      
      Per report from Andrey Lepikhov.
      
      Discussion: https://postgr.es/m/3690074f-abd2-56a9-144a-aa5545d7a291@postgrespro.ru
      07a3af0f
    • Tom Lane's avatar
      Remove dead code from pop_next_work_item(). · 789ba502
      Tom Lane authored
      The pref_non_data heuristic has been dead code for nearly ten years,
      and as far as I can tell was dead code even when it was first committed.
      I'm tired of silencing Coverity complaints about it, so get rid of it.
      If anyone is ever interested in pursuing the concept, they can get the
      code out of our git history.
      789ba502
    • Tom Lane's avatar
      Fix pgbench lexer's "continuation" rule to cope with Windows newlines. · db37ab2c
      Tom Lane authored
      Our general practice in frontend code is to accept input with either
      Unix-style newlines (\n) or DOS-style (\r\n).  pgbench was mostly down
      with that, but its rule for line continuations (backslash-newline) was
      not.  This had been masked on Windows buildfarm machines before commit
      0ba06e0b by use of Windows text mode to read files.  We could have fixed
      it by forcing text mode again, but it's better to fix the parsing code
      so that Windows-style text files on Unix systems don't cause problems.
      
      Back-patch to v10 where pgbench grew line continuations.
      
      Discussion: https://postgr.es/m/17194.1537191697@sss.pgh.pa.us
      db37ab2c
  9. 16 Sep, 2018 4 commits
    • Peter Eisentraut's avatar
      Add list of acknowledgments to release notes · f9907c6a
      Peter Eisentraut authored
      This contains all individuals mentioned in the commit messages during
      PostgreSQL 11 development.
      
      current through 7a2f70f0e5e83871d091ee479abea4b8f850dd29
      f9907c6a
    • Andrew Gierth's avatar
      Fix out-of-tree build for transform modules. · 60f6756f
      Andrew Gierth authored
      Neither plperl nor plpython installed sufficient header files to
      permit transform modules to be built out-of-tree using PGXS. Fix that
      by installing all plperl and plpython header files (other than those
      with special purposes such as generated data tables), and also install
      plpython's special .mk file for mangling regression tests.
      
      (This commit does not fix the windows install, which does not
      currently install _any_ plperl or plpython headers.)
      
      Also fix the existing transform modules for hstore and ltree so that
      their cross-module #include directives work as anticipated by commit
      df163230 et seq. This allows them to serve as working examples of
      how to reference other modules when doing separate out-of-tree builds.
      
      Discussion: https://postgr.es/m/87o9ej8bgl.fsf%40news-spur.riddles.org.uk
      60f6756f
    • Tom Lane's avatar
      Add outfuncs.c support for RawStmt nodes. · 3844adbf
      Tom Lane authored
      I noticed while poking at a report from Andrey Lepikhov that the
      recent addition of RawStmt nodes at the top of raw parse trees
      makes it impossible to print any raw parse trees whatsoever,
      because outfuncs.c doesn't know RawStmt and hence fails to descend
      into it.
      
      While we generally lack outfuncs.c support for utility statements,
      there is reasonably complete support for what you can find in a
      raw SELECT statement.  It was not my intention to make that all
      dead code ... so let's add support for RawStmt.
      
      Back-patch to v10 where RawStmt appeared.
      3844adbf
    • Bruce Momjian's avatar
      doc: clarify pg_basebackup's -C/--create-slot description · da1db404
      Bruce Momjian authored
      The previous text was overly complex.
      
      Backpatch-through: 11
      da1db404