1. 21 Aug, 2019 5 commits
  2. 20 Aug, 2019 4 commits
  3. 19 Aug, 2019 8 commits
    • Tom Lane's avatar
      Restore json{b}_populate_record{set}'s ability to take type info from AS. · e136a0d8
      Tom Lane authored
      If the record argument is NULL and has no declared type more concrete
      than RECORD, we can't extract useful information about the desired
      rowtype from it.  In this case, see if we're in FROM with an AS clause,
      and if so extract the needed rowtype info from AS.
      
      It worked like this before v11, but commit 37a795a6 removed the
      behavior, reasoning that it was undocumented, inefficient, and utterly
      not self-consistent.  If you want to take type info from an AS clause,
      you should be using the json_to_record() family of functions not the
      json_populate_record() family.  Also, it was already the case that
      the "populate" functions would fail for a null-valued RECORD input
      (with an unfriendly "record type has not been registered" error)
      when there wasn't an AS clause at hand, and it wasn't obvious that
      that behavior wasn't OK when there was one.  However, it emerges
      that some people were depending on this to work, and indeed the
      rather off-point error message you got if you left off AS encouraged
      slapping on AS without switching to the json_to_record() family.
      
      Hence, put back the fallback behavior of looking for AS.  While at it,
      improve the run-time error you get when there's no place to obtain type
      info; we can do a lot better than "record type has not been registered".
      (We can't, unfortunately, easily improve the parse-time error message
      that leads people down this path in the first place.)
      
      While at it, I refactored the code a bit to avoid duplicating the
      same logic in several different places.
      
      Per bug #15940 from Jaroslav Sivy.  Back-patch to v11 where the
      current coding came in.  (The pre-v11 deficiencies in this area
      aren't regressions, so we'll leave those branches alone.)
      
      Patch by me, based on preliminary analysis by Dmitry Dolgov.
      
      Discussion: https://postgr.es/m/15940-2ab76dc58ffb85b6@postgresql.org
      e136a0d8
    • Andres Freund's avatar
      Add fmgr.h include to selfuncs.h. · 4c01a111
      Andres Freund authored
      Necessary after fb3b098f. That previously escaped notice, because all
      including sites already include fmgr.h some other way.
      
      Reported-By: Tom Lane
      Author: Andres Freund
      Discussion: https://postgr.es/m/17463.1566153454@sss.pgh.pa.us
      4c01a111
    • Tom Lane's avatar
      Add "headerscheck" script to test header-file compilability under C. · 55ea1091
      Tom Lane authored
      We already had "cpluspluscheck", which served the dual purposes of
      verifying that headers compile standalone and that they compile as C++.
      However, C++ compilers don't have the exact same set of error conditions
      as C compilers, so this doesn't really prove that a header will compile
      standalone as C.
      
      Hence, add a second script that's largely similar but runs the C
      compiler not C++.
      
      Also add a bit more documentation than the none-at-all we had before.
      
      Discussion: https://postgr.es/m/14803.1566175851@sss.pgh.pa.us
      55ea1091
    • Tom Lane's avatar
      Use zic's new "-b slim" option to generate smaller timezone files. · a1207910
      Tom Lane authored
      IANA tzcode release 2019b adds an option that tells zic not to emit
      the old 32-bit section of the timezone files, and to skip some other
      space-wasting hacks needed for compatibility with old timezone client
      libraries.  Since we only expect our own code to use the timezone data
      we install, and our code is up-to-date with 2019b, there's no apparent
      reason not to generate the smallest possible files.
      
      Unfortunately, while the individual zone files do get significantly
      smaller in many cases, they were not that big to begin with; which
      means that no real space savings ensues on filesystems that don't
      optimize small files.  (For instance, on ext4 with 4K block size,
      "du" says the installed timezone tree is the same size as before.)
      Still, it seems worth making the change, if only because this is
      presumably the wave of the future.  At the very least, we'll save
      some cycles while reading a zone file.
      
      But given the marginal value and the fact that this is a new code
      path, it doesn't seem worth the risk of back-patching this change
      into stable branches.  Hence, unlike most of our timezone-related
      changes, apply to HEAD only.
      
      Discussion: https://postgr.es/m/24998.1563403327@sss.pgh.pa.us
      a1207910
    • Alvaro Herrera's avatar
    • Peter Eisentraut's avatar
      doc: Fix image use in PDF build with vpath · a407012c
      Peter Eisentraut authored
      In a vpath build, we need to point to the source directory to allow
      FOP to find the images.
      a407012c
    • Michael Paquier's avatar
      Fix tab completion for CREATE TYPE in psql · 71851e9a
      Michael Paquier authored
      Oversight in 7bdc6556.
      
      Author: Alexander Lakhin
      Discussion: https://postgr.es/m/5da8e325-c665-da95-21e0-c8a99ea61fbf@gmail.com
      71851e9a
    • Michael Paquier's avatar
      Fix inconsistencies and typos in the tree, take 11 · c96581ab
      Michael Paquier authored
      This fixes various typos in docs and comments, and removes some orphaned
      definitions.
      
      Author: Alexander Lakhin
      Discussion: https://postgr.es/m/5da8e325-c665-da95-21e0-c8a99ea61fbf@gmail.com
      c96581ab
  4. 18 Aug, 2019 6 commits
    • Tom Lane's avatar
      Avoid conflicts with library versions of inet_net_ntop() and friends. · 927f34ce
      Tom Lane authored
      Prefix inet_net_ntop and sibling routines with "pg_" to ensure that
      they aren't mistaken for C-library functions.  This fixes warnings
      from cpluspluscheck on some platforms, and should help reduce reader
      confusion everywhere, since our functions aren't exactly interchangeable
      with the library versions (they may have different ideas about address
      family codes).
      
      This shouldn't be fixing any actual bugs, unless somebody's linker
      is misbehaving, so no need to back-patch.
      
      Discussion: https://postgr.es/m/20518.1559494394@sss.pgh.pa.us
      927f34ce
    • Tom Lane's avatar
      Fix incidental warnings from cpluspluscheck. · 232720be
      Tom Lane authored
      Remove use of "register" keyword in hashfn.c.  It's obsolescent
      according to recent C++ compilers, and no modern C compiler pays
      much attention to it either.
      
      Also fix one cosmetic warning about signed vs unsigned comparison.
      
      Discussion: https://postgr.es/m/20518.1559494394@sss.pgh.pa.us
      232720be
    • Tom Lane's avatar
      Fix failure-to-compile-standalone in scripts_parallel.h. · 5f110933
      Tom Lane authored
      Needs libpq-fe.h for references to PGConn.
      
      Discussion: https://postgr.es/m/17463.1566153454@sss.pgh.pa.us
      5f110933
    • Tom Lane's avatar
      Fix failure-to-compile-standalone in ecpg's dt.h. · 5c66e991
      Tom Lane authored
      This has to have <time.h>, or the references to "struct tm" don't
      mean what they should.
      
      We have some other recently-introduced issues of the same ilk,
      but this one seems old.  No backpatch though, as it's only a
      latent problem for most purposes.
      5c66e991
    • Tom Lane's avatar
      Disallow changing an inherited column's type if not all parents changed. · 4d4c66ad
      Tom Lane authored
      If a table inherits from multiple unrelated parents, we must disallow
      changing the type of a column inherited from multiple such parents, else
      it would be out of step with the other parents.  However, it's possible
      for the column to ultimately be inherited from just one common ancestor,
      in which case a change starting from that ancestor should still be
      allowed.  (I would not be excited about preserving that option, were
      it not that we have regression test cases exercising it already ...)
      
      It's slightly annoying that this patch looks different from the logic
      with the same end goal in renameatt(), and more annoying that it
      requires an extra syscache lookup to make the test.  However, the
      recursion logic is quite different in the two functions, and a
      back-patched bug fix is no place to be trying to unify them.
      
      Per report from Manuel Rigger.  Back-patch to 9.5.  The bug exists in
      9.4 too (and doubtless much further back); but the way the recursion
      is done in 9.4 is a good bit different, so that substantial refactoring
      would be needed to fix it in 9.4.  I'm disinclined to do that, or risk
      introducing new bugs, for a bug that has escaped notice for this long.
      
      Discussion: https://postgr.es/m/CA+u7OA4qogDv9rz1HAb-ADxttXYPqQdUdPY_yd4kCzywNxRQXA@mail.gmail.com
      4d4c66ad
    • Peter Eisentraut's avatar
      Remove obsolete reference to Irix · 7e78c872
      Peter Eisentraut authored
      7e78c872
  5. 17 Aug, 2019 2 commits
    • Tom Lane's avatar
      Make deadlock-parallel isolation test more robust. · 9be4ce4f
      Tom Lane authored
      This test failed fairly reproducibly on some CLOBBER_CACHE_ALWAYS
      buildfarm animals.  The cause seems to be that if a parallel worker
      is slow enough to reach its lock wait, it may not be released by
      the first deadlock check run, and then later deadlock checks might
      decide to unblock the d2 session instead of the d1 session, leaving
      us in an undetected deadlock state (since the isolationtester client
      is waiting for d1 to complete first).
      
      Fix by introducing an additional lock wait at the end of the d2a1
      step, ensuring that the deadlock checker will recognize that d1
      has to be unblocked before d2a1 completes.
      
      Also reduce max_parallel_workers_per_gather to 3 in this test.  With the
      default max_worker_processes value, we were only getting one parallel
      worker for the d2a1 step, which is not the case I hoped to test.  We
      should get 3 for d1a2 and 2 for d2a1, as the code stands; and maybe 3
      for d2a1 if somebody figures out why the last parallel worker slot isn't
      free already.
      
      Discussion: https://postgr.es/m/22195.1566077308@sss.pgh.pa.us
      9be4ce4f
    • Peter Eisentraut's avatar
      Improve Assert output · d78d452b
      Peter Eisentraut authored
      If an assertion expression contained a macro, the failed assertion
      message would print the expanded macro, which is usually unhelpful and
      confusing.  Restructure the Assert macros to not expand any macros
      when constructing the failure message.
      
      This also fixes that the existing output for Assert et al. shows
      the *inverted* condition, which is also confusing and not how
      assertions usually work.
      
      Discussion: https://www.postgresql.org/message-id/flat/6c68efe3-117a-dcc1-73d4-18ba1ec532e2%402ndquadrant.com
      d78d452b
  6. 16 Aug, 2019 7 commits
  7. 15 Aug, 2019 3 commits
    • Tom Lane's avatar
      Fix plpgsql to re-look-up composite type names at need. · fe9b7b2f
      Tom Lane authored
      Commit 4b93f579 rearranged things in plpgsql to make it cope better with
      composite types changing underneath it intra-session.  However, I failed to
      consider the case of a composite type being dropped and recreated entirely.
      In my defense, the previous coding didn't consider that possibility at all
      either --- but it would accidentally work so long as you didn't change the
      type's field list, because the built-at-compile-time list of component
      variables would then still match the type's new definition.  The new
      coding, however, occasionally tries to re-look-up the type by OID, and
      then fails to find the dropped type.
      
      To fix this, we need to save the TypeName struct, and then redo the type
      OID lookup from that.  Of course that's expensive, so we don't want to do
      it every time we need the type OID.  This can be fixed in the same way that
      4b93f579 dealt with changes to composite types' definitions: keep an eye
      on the type's typcache entry to see if its tupledesc has been invalidated.
      (Perhaps, at some point, this mechanism should be generalized so it can
      work for non-composite types too; but for now, plpgsql only tries to
      cope with intra-session redefinitions of composites.)
      
      I'm slightly hesitant to back-patch this into v11, because it changes
      the contents of struct PLpgSQL_type as well as the signature of
      plpgsql_build_datatype(), so in principle it could break code that is
      poking into the innards of plpgsql.  However, the only popular extension
      of that ilk is pldebugger, and it doesn't seem to be affected.  Since
      this is a regression for people who were relying on the old behavior,
      it seems worth taking the small risk of causing compatibility issues.
      
      Per bug #15913 from Daniel Fiori.  Back-patch to v11 where 4b93f579
      came in.
      
      Discussion: https://postgr.es/m/15913-a7e112e16dedcffc@postgresql.org
      fe9b7b2f
    • Tom Lane's avatar
      Use a hash table to de-duplicate NOTIFY events faster. · bb5ae8f6
      Tom Lane authored
      Previously, async.c got rid of duplicate notifications by scanning
      the list of pending events to compare each one to the proposed new
      event.  This works okay for very small numbers of distinct events,
      but degrades as O(N^2) for many events.  We can improve matters by
      using a hash table to probe for duplicates.  So as not to add a
      lot of overhead for the simple cases that the code did handle well
      before, create the hash table only once a (sub)transaction has
      queued more than 16 distinct notify events.
      
      A downside is that we now have to do per-event work to propagate
      a successful subtransaction's notify events up to its parent.
      (But this isn't significant unless the subtransaction had many
      events, in which case the O(N^2) behavior would have been in
      play already, so we still come out ahead.)
      
      We can make some lemonade out of this lemon, though: since we must
      examine each event anyway, it's now possible to de-duplicate events
      fully, rather than skipping that for events merged up from
      subtransactions.  Hence, remove the old weasel wording in notify.sgml
      about whether de-duplication happens or not, and adjust the test
      case in async-notify.spec that exhibited the old behavior.
      
      While at it, rearrange the definition of struct Notification to make
      it more compact and require just one palloc per event, rather than
      two or three.  This saves space when there are a lot of events,
      in fact more than enough to buy back the space needed for the hash
      table.
      
      Patch by me, based on discussions around a different patch
      submitted by Filip Rembiałkowski.
      
      Discussion: https://postgr.es/m/17822.1564186806@sss.pgh.pa.us
      bb5ae8f6
    • Tom Lane's avatar
      Doc: improve documentation about postgresql.auto.conf. · 45aaaa42
      Tom Lane authored
      Clarify what external tools can do to this file, and add a bit
      of detail about what ALTER SYSTEM itself does.
      
      Discussion: https://postgr.es/m/aed6cc9f-98f3-2693-ac81-52bb0052307e@2ndquadrant.com
      45aaaa42
  8. 14 Aug, 2019 5 commits