1. 30 Oct, 2017 3 commits
    • Alvaro Herrera's avatar
      Fix autovacuum work item error handling · be72b9c3
      Alvaro Herrera authored
      In autovacuum's "work item" processing, a few strings were allocated in
      the current transaction's memory context, which goes away during error
      handling; if an error happened during execution of the work item, the
      pfree() calls to clean up afterwards would try to release already-released
      memory, possibly leading to a crash.  In branch master, this was already
      fixed by commit 335f3d04, so backpatch that to REL_10_STABLE to fix
      the problem there too.
      
      As a secondary problem, verify that the autovacuum worker is connected
      to the right database for each work item; otherwise some items would be
      discarded by workers in other databases.
      
      Reported-by: Justin Pryzby
      Discussion: https://postgr.es/m/20171014035732.GB31726@telsasoft.com
      be72b9c3
    • Magnus Hagander's avatar
      Fix typo · 77954f99
      Magnus Hagander authored
      77954f99
    • Magnus Hagander's avatar
      Fix typo in comment · 854b643c
      Magnus Hagander authored
      Etsuro Fujita
      854b643c
  2. 29 Oct, 2017 3 commits
  3. 28 Oct, 2017 6 commits
  4. 27 Oct, 2017 8 commits
  5. 26 Oct, 2017 7 commits
    • Tom Lane's avatar
      Support domains over composite types in PL/Tcl. · 820c0305
      Tom Lane authored
      Since PL/Tcl does little with SQL types internally, this is just a
      matter of making it work with composite-domain function arguments
      and results.
      
      In passing, make it allow RECORD-type arguments --- that's a trivial
      change that nobody had bothered with up to now.
      
      Discussion: https://postgr.es/m/4206.1499798337@sss.pgh.pa.us
      820c0305
    • Tom Lane's avatar
      Support domains over composite types. · 37a795a6
      Tom Lane authored
      This is the last major omission in our domains feature: you can now
      make a domain over anything that's not a pseudotype.
      
      The major complication from an implementation standpoint is that places
      that might be creating tuples of a domain type now need to be prepared
      to apply domain_check().  It seems better that unprepared code fail
      with an error like "<type> is not composite" than that it silently fail
      to apply domain constraints.  Therefore, relevant infrastructure like
      get_func_result_type() and lookup_rowtype_tupdesc() has been adjusted
      to treat domain-over-composite as a distinct case that unprepared code
      won't recognize, rather than just transparently treating it the same
      as plain composite.  This isn't a 100% solution to the possibility of
      overlooked domain checks, but it catches most places.
      
      In passing, improve typcache.c's support for domains (it can now cache
      the identity of a domain's base type), and rewrite the argument handling
      logic in jsonfuncs.c's populate_record[set]_worker to reduce duplicative
      per-call lookups.
      
      I believe this is code-complete so far as the core and contrib code go.
      The PLs need varying amounts of work, which will be tackled in followup
      patches.
      
      Discussion: https://postgr.es/m/4206.1499798337@sss.pgh.pa.us
      37a795a6
    • Tom Lane's avatar
      Make setrefs.c match by ressortgroupref even for plain Vars. · 08f1e1f0
      Tom Lane authored
      Previously, we skipped using search_indexed_tlist_for_sortgroupref()
      if the tlist expression being sought in the child plan node was merely
      a Var.  This is purely an optimization, based on the theory that
      search_indexed_tlist_for_var() is faster, and one copy of a Var should
      be as good as another.  However, the GROUPING SETS patch broke the
      latter assumption: grouping columns containing the "same" Var can
      sometimes have different outputs, as shown in the test case added here.
      So do it the hard way whenever a ressortgroupref marking exists.
      
      (If this seems like a bottleneck, we could imagine building a tlist index
      data structure for ressortgroupref values, as we do for Vars.  But I'll
      let that idea go until there's some evidence it's worthwhile.)
      
      Back-patch to 9.6.  The problem also exists in 9.5 where GROUPING SETS
      came in, but this patch is insufficient to resolve the problem in 9.5:
      there is some obscure dependency on the upper-planner-pathification
      work that happened in 9.6.  Given that this is such a weird corner case,
      and no end users have complained about it, it doesn't seem worth the work
      to develop a fix for 9.5.
      
      Patch by me, per a report from Heikki Linnakangas.  (This does not fix
      Heikki's original complaint, just the follow-on one.)
      
      Discussion: https://postgr.es/m/aefc657e-edb2-64d5-6df1-a0828f6e9104@iki.fi
      08f1e1f0
    • Andrew Dunstan's avatar
      Improve gendef.pl diagnostic on failure to open sym file · 74d2c0db
      Andrew Dunstan authored
      There have been numerous buildfarm failures but the diagnostic is
      currently silent about the reason for failure to open the file. Let's
      see if we can get to the bottom of it.
      
      Backpatch to all live branches.
      74d2c0db
    • Andrew Dunstan's avatar
    • Robert Haas's avatar
      In relevant log messages, indicate whether vacuums are aggressive. · b5550933
      Robert Haas authored
      Kyotaro Horiguchi, reviewed Masahiko Sawada, David G. Johnston, Álvaro
      Herrera, and me.  Grammar correction to the final posted patch by me.
      
      Discussion: http://postgr.es/m/20170329.124649.193656100.horiguchi.kyotaro@lab.ntt.co.jp
      b5550933
    • Michael Meskes's avatar
      Fixed handling of escape character in libecpg. · 0af98a95
      Michael Meskes authored
      Patch by Tsunakawa Takayuki <tsunakawa.takay@jp.fujitsu.com>
      0af98a95
  6. 25 Oct, 2017 3 commits
    • Tom Lane's avatar
      Fix libpq to not require user's home directory to exist. · db6986f4
      Tom Lane authored
      Some people like to run libpq-using applications in environments where
      there's no home directory.  We've broken that scenario before (cf commits
      5b406779 and bd58d9d8), and commit ba005f19 broke it again, by making
      it a hard error if we fail to get the home directory name while looking
      for ~/.pgpass.  The previous precedent is that if we can't get the home
      directory name, we should just silently act as though the file we hoped
      to find there doesn't exist.  Rearrange the new code to honor that.
      
      Looking around, the service-file code added by commit 41a4e459 had the
      same disease.  Apparently, that escaped notice because it only runs when
      a service name has been specified, which I guess the people who use this
      scenario don't do.  Nonetheless, it's wrong too, so fix that case as well.
      
      Add a comment about this policy to pqGetHomeDirectory, in the probably
      vain hope of forestalling the same error in future.  And upgrade the
      rather miserable commenting in parseServiceInfo, too.
      
      In passing, also back off parseServiceInfo's assumption that only ENOENT
      is an ignorable error from stat() when checking a service file.  We would
      need to ignore at least ENOTDIR as well (cf 5b406779), and seeing that
      the far-better-tested code for ~/.pgpass treats all stat() failures alike,
      I think this code ought to as well.
      
      Per bug #14872 from Dan Watson.  Back-patch the .pgpass change to v10
      where ba005f19 came in.  The service-file bugs are far older, so
      back-patch the other changes to all supported branches.
      
      Discussion: https://postgr.es/m/20171025200457.1471.34504@wrigleys.postgresql.org
      db6986f4
    • Andrew Dunstan's avatar
      Process variadic arguments consistently in json functions · 18fc4ecf
      Andrew Dunstan authored
      json_build_object and json_build_array and the jsonb equivalents did not
      correctly process explicit VARIADIC arguments. They are modified to use
      the new extract_variadic_args() utility function which abstracts away
      the details of the call method.
      
      Michael Paquier, reviewed by Tom Lane and Dmitry Dolgov.
      
      Backpatch to 9.5 for the jsonb fixes and 9.4 for the json fixes, as
      that's where they originated.
      18fc4ecf
    • Andrew Dunstan's avatar
      Add a utility function to extract variadic function arguments · f3c6e8a2
      Andrew Dunstan authored
      This is epecially useful in the case or "VARIADIC ANY" functions. The
      caller can get the artguments and types regardless of whether or not and
      explicit VARIADIC array argument has been used. The function also
      provides an option to convert arguments on type "unknown" to to "text".
      
      Michael Paquier and me, reviewed by Tom Lane.
      
      Backpatch to 9.4 in order to support the following json bug fix.
      f3c6e8a2
  7. 24 Oct, 2017 2 commits
    • Tom Lane's avatar
      In the planner, delete joinaliasvars lists after we're done with them. · 896eb5ef
      Tom Lane authored
      Although joinaliasvars lists coming out of the parser are quite simple,
      those lists can contain arbitrarily complex expressions after subquery
      pullup.  We do not perform expression preprocessing on them, meaning that
      expressions in those lists will not meet the expectations of later phases
      of the planner (for example, that they do not contain SubLinks).  This had
      been thought pretty harmless, since we don't intentionally touch those
      lists in later phases --- but Andreas Seltenreich found a case in which
      adjust_appendrel_attrs() could recurse into a joinaliasvars list and then
      die on its assertion that it never sees a SubLink.  We considered a couple
      of localized fixes to prevent that specific case from looking at the
      joinaliasvars lists, but really this seems like a generic hazard for all
      expression processing in the planner.  Therefore, probably the best answer
      is to delete the joinaliasvars lists from the parsetree at the end of
      expression preprocessing, so that there are no reachable expressions that
      haven't been through preprocessing.
      
      The case Andreas found seems to be harmless in non-Assert builds, and so
      far there are no field reports suggesting that there are user-visible
      effects in other cases.  I considered back-patching this anyway, but
      it turns out that Andreas' test doesn't fail at all in 9.4-9.6, because
      in those versions adjust_appendrel_attrs contains code (added in commit
      842faa71 and removed again in commit 215b43cd) to process SubLinks
      rather than complain about them.  Barring discovery of another path by
      which unprocessed joinaliasvars lists can cause trouble, the most
      prudent compromise seems to be to patch this into v10 but not further.
      
      Patch by me, with thanks to Amit Langote for initial investigation
      and review.
      
      Discussion: https://postgr.es/m/87r2tvt9f1.fsf@ansel.ydns.eu
      896eb5ef
    • Tom Lane's avatar
      Documentation improvements around domain types. · a32c0923
      Tom Lane authored
      I was a bit surprised to find that domains were almost completely
      unmentioned in the main SGML documentation, outside of the reference
      pages for CREATE/ALTER/DROP DOMAIN.  In particular, noplace was it
      mentioned that we don't support domains over composite, making it
      hard to document the planned fix for that.
      
      Hence, add a section about domains to chapter 8 (Data Types).
      
      Also, modernize the type system overview in section 37.2; it had never
      heard of range types, and insisted on calling arrays base types, which
      seems a bit odd from a user's perspective; furthermore it didn't fit well
      with the fact that we now support arrays over types other than base types.
      It seems appropriate to use the term "container types" to describe all of
      arrays, composites, and ranges, so let's do that.
      
      Also a few other minor improvements, notably improve an example query
      in rowtypes.sgml by using a LATERAL function instead of an ad-hoc
      OFFSET 0 clause.
      
      In part this is mop-up for commit c12d570f, which missed updating 37.2
      to reflect the fact that it added arrays of domains.  We could possibly
      back-patch this without that claim, but I don't feel a strong need to.
      a32c0923
  8. 23 Oct, 2017 3 commits
    • Tom Lane's avatar
      Update time zone data files to tzdata release 2017c. · 8df4ce1e
      Tom Lane authored
      DST law changes in Fiji, Namibia, Northern Cyprus, Sudan, Tonga,
      and Turks & Caicos Islands.  Historical corrections for Alaska, Apia,
      Burma, Calcutta, Detroit, Ireland, Namibia, and Pago Pago.
      8df4ce1e
    • Tom Lane's avatar
      Sync our copy of the timezone library with IANA release tzcode2017c. · 24a1897a
      Tom Lane authored
      This is a trivial update containing only cosmetic changes.  The point
      is just to get back to being synced with an official release of tzcode,
      rather than some ad-hoc point in their commit history, which is where
      commit 47f849a3 left it.
      24a1897a
    • Tom Lane's avatar
      Fix some oversights in expression dependency recording. · f3ea3e3e
      Tom Lane authored
      find_expr_references() neglected to record a dependency on the result type
      of a FieldSelect node, allowing a DROP TYPE to break a view or rule that
      contains such an expression.  I think we'd omitted this case intentionally,
      reasoning that there would always be a related dependency ensuring that the
      DROP would cascade to the view.  But at least with nested field selection
      expressions, that's not true, as shown in bug #14867 from Mansur Galiev.
      Add the dependency, and for good measure a dependency on the node's exposed
      collation.
      
      Likewise add a dependency on the result type of a FieldStore.  I think here
      the reasoning was that it'd only appear within an assignment to a field,
      and the dependency on the field's column would be enough ... but having
      seen this example, I think that's wrong for nested-composites cases.
      
      Looking at nearby code, I notice we're not recording a dependency on the
      exposed collation of CoerceViaIO, which seems inconsistent with our choices
      for related node types.  Maybe that's OK but I'm feeling suspicious of this
      code today, so let's add that; it certainly can't hurt.
      
      This patch does not do anything to protect already-existing views, only
      views created after it's installed.  But seeing that the issue has been
      there a very long time and nobody noticed till now, that's probably good
      enough.
      
      Back-patch to all supported branches.
      
      Discussion: https://postgr.es/m/20171023150118.1477.19174@wrigleys.postgresql.org
      f3ea3e3e
  9. 22 Oct, 2017 1 commit
    • Tom Lane's avatar
      Adjust psql \d query to avoid use of @> operator. · 471d5585
      Tom Lane authored
      It seems that the parray_gin extension has seen fit to introduce a
      "text[] @> text[]" operator, which conflicts with the core
      "anyarray @> anyarray" operator, causing ambiguous-operator failures
      if the input arguments are coercible to text[] without being exactly
      that type.  This strikes me as a bad idea, but it's out there and
      people use it.  As of v10, that breaks psql's query that tries to
      test "pg_statistic_ext.stxkind @> '{d}'", since stxkind is char[].
      The best workaround seems to be to avoid use of that operator.
      We can use a scalar-vs-array test "'d' = any(stxkind)" instead;
      that's arguably more readable anyway.
      
      Per report from Justin Pryzby.  Backpatch to v10 where this
      query was added.
      
      Discussion: https://postgr.es/m/20171022181525.GA21884@telsasoft.com
      471d5585
  10. 21 Oct, 2017 1 commit
  11. 20 Oct, 2017 3 commits
    • Peter Eisentraut's avatar
      Convert SGML IDs to lower case · 1ff01b39
      Peter Eisentraut authored
      IDs in SGML are case insensitive, and we have accumulated a mix of upper
      and lower case IDs, including different variants of the same ID.  In
      XML, these will be case sensitive, so we need to fix up those
      differences.  Going to all lower case seems most straightforward, and
      the current build process already makes all anchors and lower case
      anyway during the SGML->XML conversion, so this doesn't create any
      difference in the output right now.  A future XML-only build process
      would, however, maintain any mixed case ID spellings in the output, so
      that is another reason to clean this up beforehand.
      
      Author: Alexander Lakhin <exclusion@gmail.com>
      1ff01b39
    • Tom Lane's avatar
      Fix typcache's failure to treat ranges as container types. · 36ea99c8
      Tom Lane authored
      Like the similar logic for arrays and records, it's necessary to examine
      the range's subtype to decide whether the range type can support hashing.
      We can omit checking the subtype for btree-defined operations, though,
      since range subtypes are required to have those operations.  (Possibly
      that simplification for btree cases led us to overlook that it does
      not apply for hash cases.)
      
      This is only an issue if the subtype lacks hash support, which is not
      true of any built-in range type, but it's easy to demonstrate a problem
      with a range type over, eg, money: you can get a "could not identify
      a hash function" failure when the planner is misled into thinking that
      hash join or aggregation would work.
      
      This was born broken, so back-patch to all supported branches.
      36ea99c8
    • Tom Lane's avatar
      Fix misimplementation of typcache logic for extended hashing. · a8f1efc8
      Tom Lane authored
      The previous coding would report that an array type supports extended
      hashing if its element type supports regular hashing.  This bug is
      only latent at the moment, since AFAICS there is not yet any code
      that depends on checking presence of extended-hashing support to make
      any decisions.  (And in any case it wouldn't matter unless the element
      type has only regular hashing, which isn't true of any core data type.)
      But that doesn't make it less broken.  Extend the
      cache_array_element_properties infrastructure to check this properly.
      a8f1efc8