1. 27 Jul, 2017 6 commits
    • Tom Lane's avatar
      Fix psql tab completion for CREATE USER MAPPING. · 8d304072
      Tom Lane authored
      After typing CREATE USER M..., it would not fill in MAPPING FOR,
      even though that was clearly intended behavior.
      
      Jeff Janes
      
      Discussion: https://postgr.es/m/CAMkU=1wo2iQ6jWnN=egqOb5NxEPn0PpANEtKHr3uPooQ+nYPtw@mail.gmail.com
      8d304072
    • Tom Lane's avatar
      Standardize describe.c's behavior for no-matching-objects a bit more. · 77cb4a1d
      Tom Lane authored
      Most functions in this file are content to print an empty table if there
      are no matching objects.  In some, the behavior is to loop over all
      matching objects and print a table for each one; therefore, without any
      extra logic, nothing at all would be printed if no objects match.
      We accept that outcome in QUIET mode, but in normal mode it seems better
      to print a helpful message.  The new \dRp+ command had not gotten that
      memo; fix it.
      
      listDbRoleSettings() is out of step on this, but I think it's better for
      it to print a custom message rather than an empty table, because of the
      possibility that the user is confused about what the pattern arguments mean
      or which is which.  The original message wording was entirely useless for
      clarifying that, though, not to mention being unlike the wordings used
      elsewhere.  Improve the text, and also print the messages with psql_error
      as is the general custom here.
      
      listTables() is also out in left field, but since it's such a heavily
      used function, I'm hesitant to change its behavior so much as to print
      an empty table rather than a custom message.  People are probably used
      to getting a message.  But we can make the wording more standardized and
      helpful, and print it with psql_error rather than printing to stdout.
      
      In both listDbRoleSettings and listTables, we play dumb and emit an
      empty table, not a custom message, in QUIET mode.  That was true before
      and I see no need to change it.
      
      Several of the places printing such messages risked dumping core if
      no pattern string had been provided; make them more wary.  (This case
      is presently unreachable in describeTableDetails; but it shouldn't be
      assuming that command.c will never pass it a null.  The text search
      functions would only reach the case if a database contained no text
      search objects, which is also currently impossible since we pin the
      built-in objects, but again it seems unwise to assume that here.)
      
      Daniel Gustafsson, tweaked a bit by me
      
      Discussion: https://postgr.es/m/3641F19B-336A-431A-86CE-A80562505C5E@yesql.se
      77cb4a1d
    • Tom Lane's avatar
      Avoid use of sprintf/snprintf in describe.c. · 1e2f941d
      Tom Lane authored
      Most places were already using the PQExpBuffer library for constructing
      variable-length strings; bring the two stragglers into line.
      describeOneTSParser was living particularly dangerously since it wasn't
      even using snprintf().
      
      Daniel Gustafsson
      
      Discussion: https://postgr.es/m/3641F19B-336A-431A-86CE-A80562505C5E@yesql.se
      1e2f941d
    • Tom Lane's avatar
      Sync listDbRoleSettings() with the rest of the world. · b884f629
      Tom Lane authored
      listDbRoleSettings() handled its server version check randomly differently
      from every other comparable function in describe.c, not only as to code
      layout but also message wording.  It also leaked memory, because its
      PQExpBuffer management was also unlike everyplace else (and wrong).
      
      Also fix an error-case leak in add_tablespace_footer().
      
      In passing, standardize the format of function header comments in
      describe.c --- we usually put "/*" alone on a line.
      
      Daniel Gustafsson, memory leak fixes by me
      
      Discussion: https://postgr.es/m/3641F19B-336A-431A-86CE-A80562505C5E@yesql.se
      b884f629
    • Tom Lane's avatar
      Fix very minor memory leaks in psql's command.c. · dc4da3dc
      Tom Lane authored
      \drds leaked its second pattern argument if any, and \connect leaked
      any empty-string or "-" arguments.  These are old bugs, but it's hard
      to imagine any real use-case where the leaks could amount to anything
      meaningful, so not bothering with a back-patch.
      
      Daniel Gustafsson and Tom Lane
      
      Discussion: https://postgr.es/m/3641F19B-336A-431A-86CE-A80562505C5E@yesql.se
      dc4da3dc
    • Andrew Dunstan's avatar
      Work around Msys weakness in Testlib.pm's command_like() · efd7f8e3
      Andrew Dunstan authored
      When output of IPC::Run::run () is redirected to scalar references, in
      certain circumstances the Msys perl does not correctly detect that the
      end of file has been seen, making the test hang indefinitely. One such
      circumstance is when the command is 'pg_ctl start', and such a change
      was made in commit f13ea95f. The workaround, which only applies on
      MSys, is to redirect the output to temporary files and then read them in
      when the process has finished.
      
      Patch by me, reviewed and tweaked by Tom Lane.
      efd7f8e3
  2. 26 Jul, 2017 4 commits
    • Tom Lane's avatar
      Clean up SQL emitted by psql/describe.c. · 50d2426f
      Tom Lane authored
      Fix assorted places that had not bothered with the convention of
      prefixing catalog and function names with "pg_catalog.".  That
      could possibly result in query failure when running with a nondefault
      search_path.  Also fix two places that weren't quoting OID literals.
      I think the latter hasn't mattered much since about 7.3, but it's still
      a bad idea to be doing it in 99 places and not in 2 others.
      
      Also remove a useless EXISTS sub-select that someone had stuck into
      describeOneTableDetails' queries for child tables.  We just got the OID
      out of pg_class, so I hardly see how checking that it exists in pg_class
      was doing anything helpful.
      
      In passing, try to improve the emitted formatting of a couple of
      these queries, though I didn't work really hard on that.  And merge
      unnecessarily duplicative coding in some other places.
      
      Much of this was new in HEAD, but some was quite old; back-patch
      as appropriate.
      50d2426f
    • Alvaro Herrera's avatar
      Update copyright in recently added files · 5e3254f0
      Alvaro Herrera authored
      5e3254f0
    • Alvaro Herrera's avatar
      Fix concurrent locking of tuple update chain · 459c64d3
      Alvaro Herrera authored
      If several sessions are concurrently locking a tuple update chain with
      nonconflicting lock modes using an old snapshot, and they all succeed,
      it may happen that some of them fail because of restarting the loop (due
      to a concurrent Xmax change) and getting an error in the subsequent pass
      while trying to obtain a tuple lock that they already have in some tuple
      version.
      
      This can only happen with very high concurrency (where a row is being
      both updated and FK-checked by multiple transactions concurrently), but
      it's been observed in the field and can have unpleasant consequences
      such as an FK check failing to see a tuple that definitely exists:
          ERROR:  insert or update on table "child_table" violates foreign key constraint "fk_constraint_name"
          DETAIL:  Key (keyid)=(123456) is not present in table "parent_table".
      (where the key is observably present in the table).
      
      Discussion: https://postgr.es/m/20170714210011.r25mrff4nxjhmf3g@alvherre.pgsql
      459c64d3
    • Alvaro Herrera's avatar
      Remove obsolete comments about functional dependencies · c28e4f4d
      Alvaro Herrera authored
      Initial submitted versions of the functional dependencies patch ignored
      row groups that were smaller than a configured size.  However, that
      consideration was removed in late stages of the patch just before
      commit, but some comments referring to it remained.  Remove them to
      avoid confusion.
      
      Author: Atsushi Torikoshi
      Discussion: https://postgr.es/m/7cfb23fc-4493-9c02-5da9-e505fd0115d2@lab.ntt.co.jp
      c28e4f4d
  3. 25 Jul, 2017 2 commits
    • Alvaro Herrera's avatar
      Make PostgresNode easily subclassable · 54dacc74
      Alvaro Herrera authored
      This module becomes much more useful if we allow it to be used as base
      class for external projects.  To achieve this, change the exported
      get_new_node function into a class method instead, and use the standard
      Perl idiom of accepting the class as first argument.  This method works
      as expected for subclasses.  The standalone function is kept for
      backwards compatibility, though it could be removed in pg11.
      
      Author: Chap Flackman, based on an earlier patch from Craig Ringer
      Discussion: https://postgr.es/m/CAMsr+YF8kO+4+K-_U4PtN==2FndJ+5Bn6A19XHhMiBykEwv0wA@mail.gmail.com
      54dacc74
    • Alvaro Herrera's avatar
      Fix race conditions in replication slot operations · 9915de6c
      Alvaro Herrera authored
      It is relatively easy to get a replication slot to look as still active
      while one process is in the process of getting rid of it; when some
      other process tries to "acquire" the slot, it would fail with an error
      message of "replication slot XYZ is active for PID N".
      
      The error message in itself is fine, except that when the intention is
      to drop the slot, it is unhelpful: the useful behavior would be to wait
      until the slot is no longer acquired, so that the drop can proceed.  To
      implement this, we use a condition variable so that slot acquisition can
      be told to wait on that condition variable if the slot is already
      acquired, and we make any change in active_pid broadcast a signal on the
      condition variable.  Thus, as soon as the slot is released, the drop
      will proceed properly.
      
      Reported by: Tom Lane
      Discussion: https://postgr.es/m/11904.1499039688@sss.pgh.pa.us
      Authors: Petr Jelínek, Álvaro Herrera
      9915de6c
  4. 24 Jul, 2017 7 commits
    • Robert Haas's avatar
      Fix partitioning crashes during error reporting. · 4132dbec
      Robert Haas authored
      In various places where we reverse-map a tuple before calling
      ExecBuildSlotValueDescription, we neglected to ensure that the
      slot descriptor matched the tuple stored in it.
      
      Amit Langote and Amit Khandekar, reviewed by Etsuro Fujita
      
      Discussion: http://postgr.es/m/CAJ3gD9cqpP=WvJj=dv1ONkPWjy8ZuUaOM4_x86i3uQPas=0_jg@mail.gmail.com
      4132dbec
    • Tom Lane's avatar
      Fix race condition in predicate-lock init code in EXEC_BACKEND builds. · e2c8100e
      Tom Lane authored
      Trading a little too heavily on letting the code path be the same whether
      we were creating shared data structures or only attaching to them,
      InitPredicateLocks() inserted the "scratch" PredicateLockTargetHash entry
      unconditionally.  This is just wrong if we're in a postmaster child,
      which would only reach this code in EXEC_BACKEND builds.  Most of the
      time, the hash_search(HASH_ENTER) call would simply report that the
      entry already existed, causing no visible effect since the code did not
      bother to check for that possibility.  However, if this happened while
      some other backend had transiently removed the "scratch" entry, then
      that other backend's eventual RestoreScratchTarget would suffer an
      assert failure; this appears to be the explanation for a recent failure
      on buildfarm member culicidae.  In non-assert builds, there would be
      no visible consequences there either.  But nonetheless this is a pretty
      bad bug for EXEC_BACKEND builds, for two reasons:
      
      1. Each new backend would perform the hash_search(HASH_ENTER) call
      without holding any lock that would prevent concurrent access to the
      PredicateLockTargetHash hash table.  This creates a low but certainly
      nonzero risk of corruption of that hash table.
      
      2. In the event that the race condition occurred, by reinserting the
      scratch entry too soon, we were defeating the entire purpose of the
      scratch entry, namely to guarantee that transaction commit could move
      hash table entries around with no risk of out-of-memory failure.
      The odds of an actual OOM failure are quite low, but not zero, and if
      it did happen it would again result in corruption of the hash table.
      
      The user-visible symptoms of such corruption are a little hard to predict,
      but would presumably amount to misbehavior of SERIALIZABLE transactions
      that'd require a crash or postmaster restart to fix.
      
      To fix, just skip the hash insertion if IsUnderPostmaster.  I also
      inserted a bunch of assertions that the expected things happen
      depending on whether IsUnderPostmaster is true.  That might be overkill,
      since most comparable code in other functions isn't quite that paranoid,
      but once burnt twice shy.
      
      In passing, also move a couple of lines to places where they seemed
      to make more sense.
      
      Diagnosis of problem by Thomas Munro, patch by me.  Back-patch to
      all supported branches.
      
      Discussion: https://postgr.es/m/10593.1500670709@sss.pgh.pa.us
      e2c8100e
    • Robert Haas's avatar
      When WCOs are present, disable direct foreign table modification. · 7086be6e
      Robert Haas authored
      If the user modifies a view that has CHECK OPTIONs and this gets
      translated into a modification to an underlying relation which happens
      to be a foreign table, the check options should be enforced.  In the
      normal code path, that was happening properly, but it was not working
      properly for "direct" modification because the whole operation gets
      pushed to the remote side in that case and we never have an option to
      enforce the constraint against individual tuples.  Fix by disabling
      direct modification when there is a need to enforce CHECK OPTIONs.
      
      Etsuro Fujita, reviewed by Kyotaro Horiguchi and by me.
      
      Discussion: http://postgr.es/m/f8a48f54-6f02-9c8a-5250-9791603171ee@lab.ntt.co.jp
      7086be6e
    • Tom Lane's avatar
      Ensure that pg_get_ruledef()'s output matches pg_get_viewdef()'s. · b4af9e3f
      Tom Lane authored
      Various cases involving renaming of view columns are handled by having
      make_viewdef pass down the view's current relation tupledesc to
      get_query_def, which then takes care to use the column names from the
      tupledesc for the output column names of the SELECT.  For some reason
      though, we'd missed teaching make_ruledef to do similarly when it is
      printing an ON SELECT rule, even though this is exactly the same case.
      The results from pg_get_ruledef would then be different and arguably wrong.
      In particular, this breaks pre-v10 versions of pg_dump, which in some
      situations would define views by means of emitting a CREATE RULE ... ON
      SELECT command.  Third-party tools might not be happy either.
      
      In passing, clean up some crufty code in make_viewdef; we'd apparently
      modernized the equivalent code in make_ruledef somewhere along the way,
      and missed this copy.
      
      Per report from Gilles Darold.  Back-patch to all supported versions.
      
      Discussion: https://postgr.es/m/ec05659a-40ff-4510-fc45-ca9d965d0838@dalibo.com
      b4af9e3f
    • Tom Lane's avatar
      Be more consistent about errors for opfamily member lookup failures. · 278cb434
      Tom Lane authored
      Add error checks in some places that were calling get_opfamily_member
      or get_opfamily_proc and just assuming that the call could never fail.
      Also, standardize the wording for such errors in some other places.
      
      None of these errors are expected in normal use, hence they're just
      elog not ereport.  But they may be handy for diagnosing omissions in
      custom opclasses.
      
      Rushabh Lathia found the oversight in RelationBuildPartitionKey();
      I found the others by grepping for all callers of these functions.
      
      Discussion: https://postgr.es/m/CAGPqQf2R9Nk8htpv0FFi+FP776EwMyGuORpc9zYkZKC8sFQE3g@mail.gmail.com
      278cb434
    • Noah Misch's avatar
      MSVC: Finish clean.bat build artifact coverage. · bbbd9121
      Noah Misch authored
      With this, "git clean -dnx" is clear after a "clean dist" following a
      build.  Preserve sql_help.h in non-dist cleans, like the Makefile does.
      bbbd9121
    • Noah Misch's avatar
      MSVC: Accept tcl86.lib in addition to tcl86t.lib. · 71ad8000
      Noah Misch authored
      ActiveTcl8.6.4.1.299124-win32-x86_64-threaded.exe ships just tcl86.lib.
      Back-patch to 9.2, like the commit recognizing tcl86t.lib.
      71ad8000
  5. 23 Jul, 2017 1 commit
    • Tom Lane's avatar
      Fix pg_dump's handling of event triggers. · 93f039b4
      Tom Lane authored
      pg_dump with the --clean option failed to emit DROP EVENT TRIGGER
      commands for event triggers.  In a closely related oversight,
      it also did not emit ALTER OWNER commands for event triggers.
      Since only superusers can create event triggers, the latter oversight
      is of little practical consequence ... but if we're going to record
      an owner for event triggers, then surely pg_dump should preserve it.
      
      Per complaint from Greg Atkins.  Back-patch to 9.3 where event triggers
      were introduced.
      
      Discussion: https://postgr.es/m/20170722191142.yi4e7tzcg3iacclg@gmail.com
      93f039b4
  6. 22 Jul, 2017 3 commits
  7. 21 Jul, 2017 8 commits
    • Tom Lane's avatar
      Doc: update versioning information in libpq.sgml. · e22efaab
      Tom Lane authored
      The descriptions of PQserverVersion and PQlibVersion hadn't been updated
      for the new two-part version-numbering approach.  Fix that.
      
      In passing, remove some trailing whitespace elsewhere in the file.
      e22efaab
    • Robert Haas's avatar
      pg_rewind: Fix some problems when copying files >2GB. · a46fe6e8
      Robert Haas authored
      When incrementally updating a file larger than 2GB, the old code could
      either fail outright (if the client asked the server for bytes beyond
      the 2GB boundary) or fail to copy all the blocks that had actually
      been modified (if the server reported a file size to the client in
      excess of 2GB), resulting in data corruption.  Generally, such files
      won't occur anyway, but they might if using a non-default segment size
      or if there the directory contains stray files unrelated to
      PostgreSQL.  Fix by a more prudent choice of data types.
      
      Even with these improvements, this code still uses a mix of different
      types (off_t, size_t, uint64, int64) to represent file sizes and
      offsets, not all of which necessarily have the same width or
      signedness, so further cleanup might be in order here.  However, at
      least now they all have the potential to be 64 bits wide on 64-bit
      platforms.
      
      Kuntal Ghosh and Michael Paquier, with a tweak by me.
      
      Discussion: http://postgr.es/m/CAGz5QC+8gbkz=Brp0TgoKNqHWTzonbPtPex80U0O6Uh_bevbaA@mail.gmail.com
      a46fe6e8
    • Tom Lane's avatar
      Stabilize postgres_fdw regression tests. · 88f48b57
      Tom Lane authored
      The new test cases added in commit 8bf58c0d turn out to have output
      that can vary depending on the lc_messages setting prevailing on the
      test server.  Hide the remote end's error messages to ensure stable
      output.  This isn't a terribly desirable solution; we'd rather know
      that the connection failed for the expected reason and not some other
      one.  But there seems little choice for the moment.
      
      Per buildfarm.
      
      Discussion: https://postgr.es/m/18419.1500658570@sss.pgh.pa.us
      88f48b57
    • Robert Haas's avatar
      pg_rewind: Fix busted sanity check. · 063ff921
      Robert Haas authored
      As written, the code would only fail the sanity check if none of the
      columns returned by the server were of the expected type, but we want
      it to fail if even one column is not of the expected type.
      
      Discussion: http://postgr.es/m/CA+TgmoYuY5zW7JEs+1hSS1D=V5K8h1SQuESrq=bMNeo0B71Sfw@mail.gmail.com
      063ff921
    • Tom Lane's avatar
      Re-establish postgres_fdw connections after server or user mapping changes. · 8bf58c0d
      Tom Lane authored
      Previously, postgres_fdw would keep on using an existing connection even
      if the user did ALTER SERVER or ALTER USER MAPPING commands that should
      affect connection parameters.  Teach it to watch for catcache invals
      on these catalogs and re-establish connections when the relevant catalog
      entries change.  Per bug #14738 from Michal Lis.
      
      In passing, clean up some rather crufty decisions in commit ae9bfc5d
      about where fields of ConnCacheEntry should be reset.  We now reset
      all the fields whenever we open a new connection.
      
      Kyotaro Horiguchi, reviewed by Ashutosh Bapat and myself.
      Back-patch to 9.3 where postgres_fdw appeared.
      
      Discussion: https://postgr.es/m/20170710113917.7727.10247@wrigleys.postgresql.org
      8bf58c0d
    • Teodor Sigaev's avatar
      Fix double shared memory allocation. · 7e1fb4c5
      Teodor Sigaev authored
      SLRU buffer lwlocks are allocated twice by oversight in commit
      fe702a7b where that locks were moved to
      separate tranche. The bug doesn't have user-visible effects except small
      overspending of shared memory.
      
      Backpatch to 9.6 where it was introduced.
      
      Alexander Korotkov with small editorization by me.
      7e1fb4c5
    • Dean Rasheed's avatar
      Make the new partition regression tests locale-independent. · 68f785fd
      Dean Rasheed authored
      The order of partitions listed by \d+ is in general locale-dependent.
      Rename the partitions in the test added by d363d42b to force them to
      be listed in a consistent order.
      68f785fd
    • Dean Rasheed's avatar
      Use MINVALUE/MAXVALUE instead of UNBOUNDED for range partition bounds. · d363d42b
      Dean Rasheed authored
      Previously, UNBOUNDED meant no lower bound when used in the FROM list,
      and no upper bound when used in the TO list, which was OK for
      single-column range partitioning, but problematic with multiple
      columns. For example, an upper bound of (10.0, UNBOUNDED) would not be
      collocated with a lower bound of (10.0, UNBOUNDED), thus making it
      difficult or impossible to define contiguous multi-column range
      partitions in some cases.
      
      Fix this by using MINVALUE and MAXVALUE instead of UNBOUNDED to
      represent a partition column that is unbounded below or above
      respectively. This syntax removes any ambiguity, and ensures that if
      one partition's lower bound equals another partition's upper bound,
      then the partitions are contiguous.
      
      Also drop the constraint prohibiting finite values after an unbounded
      column, and just document the fact that any values after MINVALUE or
      MAXVALUE are ignored. Previously it was necessary to repeat UNBOUNDED
      multiple times, which was needlessly verbose.
      
      Note: Forces a post-PG 10 beta2 initdb.
      
      Report by Amul Sul, original patch by Amit Langote with some
      additional hacking by me.
      
      Discussion: https://postgr.es/m/CAAJ_b947mowpLdxL3jo3YLKngRjrq9+Ej4ymduQTfYR+8=YAYQ@mail.gmail.com
      d363d42b
  8. 20 Jul, 2017 3 commits
  9. 19 Jul, 2017 2 commits
  10. 18 Jul, 2017 4 commits
    • Tom Lane's avatar
      Improve make_tsvector() to handle empty input, and simplify its callers. · 04a2c7f4
      Tom Lane authored
      It seemed a bit silly that each caller of make_tsvector() was laboriously
      special-casing the situation where no lexemes were found, when it would
      be easy and much more bullet-proof to make make_tsvector() handle that.
      04a2c7f4
    • Tom Lane's avatar
      Fix serious performance problems in json(b) to_tsvector(). · b4c6d31c
      Tom Lane authored
      In an off-list followup to bug #14745, Bob Jones complained that
      to_tsvector() on a 2MB jsonb value took an unreasonable amount of
      time and space --- enough to draw the wrath of the OOM killer on
      his machine.  On my machine, his example proved to require upwards
      of 18 seconds and 4GB, which seemed pretty bogus considering that
      to_tsvector() on the same data treated as text took just a couple
      hundred msec and 10 or so MB.
      
      On investigation, the problem is that the implementation scans each
      string element of the json(b) and converts it to tsvector separately,
      then applies tsvector_concat() to join those separate tsvectors.
      The unreasonable memory usage came from leaking every single one of
      the transient tsvectors --- but even without that mistake, this is an
      O(N^2) or worse algorithm, because tsvector_concat() has to repeatedly
      process the words coming from earlier elements.
      
      We can fix it by accumulating all the lexeme data and applying
      make_tsvector() just once.  As a side benefit, that also makes the
      desired adjustment of lexeme positions far cheaper, because we can
      just tweak the running "pos" counter between JSON elements.
      
      In passing, try to make the explanation of that tweak more intelligible.
      (I didn't think that a barely-readable comment far removed from the
      actual code was helpful.)  And do some minor other code beautification.
      b4c6d31c
    • Tom Lane's avatar
      Doc: fix thinko in v10 release notes. · fb9bd4b0
      Tom Lane authored
      s/log_destination/log_directory/, per Jov in bug #14749.
      
      Report: https://postgr.es/m/20170718082444.9229.99690@wrigleys.postgresql.org
      fb9bd4b0
    • Robert Haas's avatar
      Reverse-convert row types in ExecWithCheckOptions. · c85ec643
      Robert Haas authored
      Just as we already do in ExecConstraints, and for the same reason:
      to improve the quality of error messages.
      
      Etsuro Fujita, reviewed by Amit Langote
      
      Discussion: http://postgr.es/m/56e0baa8-e458-2bbb-7936-367f7d832e43@lab.ntt.co.jp
      c85ec643