1. 24 Apr, 2017 3 commits
    • Fujii Masao's avatar
      Get rid of extern declarations of non-existent functions. · cbc2270e
      Fujii Masao authored
      Those extern declartions were mistakenly added by commit 7c4f5240.
      
      Author: Petr Jelinek
      cbc2270e
    • Tom Lane's avatar
      Fix postmaster's handling of fork failure for a bgworker process. · 4fe04244
      Tom Lane authored
      This corner case didn't behave nicely at all: the postmaster would
      (partially) update its state as though the process had started
      successfully, and be quite confused thereafter.  Fix it to act
      like the worker had crashed, instead.
      
      In passing, refactor so that do_start_bgworker contains all the
      state-change logic for bgworker launch, rather than just some of it.
      
      Back-patch as far as 9.4.  9.3 contains similar logic, but it's just
      enough different that I don't feel comfortable applying the patch
      without more study; and the use of bgworkers in 9.3 was so small
      that it doesn't seem worth the extra work.
      
      transam/parallel.c is still entirely unprepared for the possibility
      of bgworker startup failure, but that seems like material for a
      separate patch.
      
      Discussion: https://postgr.es/m/4905.1492813727@sss.pgh.pa.us
      4fe04244
    • Tom Lane's avatar
      Code review for commands/statscmds.c. · 4b34624d
      Tom Lane authored
      Fix machine-dependent sorting of column numbers.  (Odd behavior
      would only materialize for column numbers above 255, but that's
      certainly legal.)
      
      Fix poor choice of SQLSTATE for some errors, and improve error message
      wording.  (Notably, "is not a scalar type" is a totally misleading way
      to explain "does not have a default btree opclass".)
      
      Avoid taking AccessExclusiveLock on the associated relation during DROP
      STATISTICS.  That's neither necessary nor desirable, and it could easily
      have put us into situations where DROP fails (compare commit 68ea2b7f).
      
      Adjust/improve comments.
      
      David Rowley and Tom Lane
      
      Discussion: https://postgr.es/m/CAKJS1f-GmCfPvBbAEaM5xoVOaYdVgVN1gicALSoYQ77z-+vLbw@mail.gmail.com
      4b34624d
  2. 23 Apr, 2017 8 commits
  3. 22 Apr, 2017 4 commits
    • Tom Lane's avatar
      Make PostgresNode.pm check server status more carefully. · 7d68f228
      Tom Lane authored
      PostgresNode blithely ignored the exit status of pg_ctl, and in general
      made no effort to be sure that the server was running when it should be.
      This caused it to miss server crashes, which is a serious shortcoming
      in a test scaffold.  Make it complain if pg_ctl fails, and modify the
      start and stop logic to complain if the server doesn't start, or doesn't
      stop, when expected.
      
      Also, have it turn off the "restart_after_crash" configuration parameter
      in created clusters, as bitter experience has shown that leaving that on
      can mask crashes too.
      
      We might at some point need variant functions that allow for, eg,
      server start failure to be expected.  But no existing test case appears
      to want that, and it surely shouldn't be the default behavior.
      
      Note that this *will* break the buildfarm, as it will expose known
      bugs that the previous testing failed to.  I'm committing it despite
      that, to verify that we get the expected failures in the buildfarm
      not just in manual testing.
      
      Back-patch into 9.6 where PostgresNode was introduced.  (The 9.6
      branch is not expected to show any failures.)
      
      Discussion: https://postgr.es/m/21432.1492886428@sss.pgh.pa.us
      7d68f228
    • Tom Lane's avatar
      Make PostgresNode::append_conf append a newline automatically. · 8a19c1a3
      Tom Lane authored
      Although the documentation for append_conf said clearly that it didn't
      add a newline, many test authors seem to have forgotten that ... or maybe
      they just consulted the example at the top of the POD documentation,
      which clearly shows adding a config entry without bothering to add a
      trailing newline.  The worst part of that is that it works, as long as
      you don't do it more than once, since the backend isn't picky about
      whether config files end with newlines.  So there's not a strong forcing
      function reminding test authors not to do it like that.  Upshot is that
      this is a terribly fragile way to go about things, and there's at least
      one existing test case that is demonstrably broken and not testing what
      it thinks it is.
      
      Let's just make append_conf append a newline, instead; that is clearly
      way safer than the old definition.
      
      I also cleaned up a few call sites that were unnecessarily ugly.
      (I left things alone in places where it's plausible that additional
      config lines would need to be added someday.)
      
      Back-patch the change in append_conf itself to 9.6 where it was added,
      as having a definitional inconsistency between branches would obviously
      be pretty hazardous for back-patching TAP tests.  The other changes are
      just cosmetic and don't need to be back-patched.
      
      Discussion: https://postgr.es/m/19751.1492892376@sss.pgh.pa.us
      8a19c1a3
    • Andrew Dunstan's avatar
      Require sufficiently modern version of Test::More for TAP tests · f92562ad
      Andrew Dunstan authored
      Ancient versions of Test::More don't support the note() function used in
      some TAP tests, so we require the minimum version of the module that
      does.
      f92562ad
    • Tom Lane's avatar
      Partially revert commit 536d47bd. · 5041cdf2
      Tom Lane authored
      Per buildfarm, the "#ifdef F_SETFD" removed in that commit actually
      is needed on Windows, because fcntl() isn't available at all on that
      platform, unless using Cygwin.  We could perhaps spell it more like
      "#ifdef HAVE_FCNTL", or "#ifndef WIN32", but it's not clear that
      those choices are better.
      
      It does seem that we don't need the bogus manual definition of
      FD_CLOEXEC, though, so keep that change.
      
      Discussion: https://postgr.es/m/26254.1492805635@sss.pgh.pa.us
      5041cdf2
  4. 21 Apr, 2017 6 commits
    • Peter Eisentraut's avatar
      doc: Update link · f58b6643
      Peter Eisentraut authored
      The reference "That is the topic of the next section." has been
      incorrect since the materialized views documentation got inserted
      between the section "rules-views" and "rules-update".
      
      Author: Zertrin <postgres_wiki@zertrin.org>
      f58b6643
    • Tom Lane's avatar
      Avoid depending on non-POSIX behavior of fcntl(2). · 3e51725b
      Tom Lane authored
      The POSIX standard does not say that the success return value for
      fcntl(F_SETFD) and fcntl(F_SETFL) is zero; it says only that it's not -1.
      We had several calls that were making the stronger assumption.  Adjust
      them to test specifically for -1 for strict spec compliance.
      
      The standard further leaves open the possibility that the O_NONBLOCK
      flag bit is not the only active one in F_SETFL's argument.  Formally,
      therefore, one ought to get the current flags with F_GETFL and store
      them back with only the O_NONBLOCK bit changed when trying to change
      the nonblock state.  In port/noblock.c, we were doing the full pushup
      in pg_set_block but not in pg_set_noblock, which is just weird.  Make
      both of them do it properly, since they have little business making
      any assumptions about the socket they're handed.  The other places
      where we're issuing F_SETFL are working with FDs we just got from
      pipe(2), so it's reasonable to assume the FDs' properties are all
      default, so I didn't bother adding F_GETFL steps there.
      
      Also, while pg_set_block deserves some points for trying to do things
      right, somebody had decided that it'd be even better to cast fcntl's
      third argument to "long".  Which is completely loony, because POSIX
      clearly says the third argument for an F_SETFL call is "int".
      
      Given the lack of field complaints, these missteps apparently are not
      of significance on any common platforms.  But they're still wrong,
      so back-patch to all supported branches.
      
      Discussion: https://postgr.es/m/30882.1492800880@sss.pgh.pa.us
      3e51725b
    • Heikki Linnakangas's avatar
      Change the on-disk format of SCRAM verifiers to conform to RFC 5803. · 68e61ee7
      Heikki Linnakangas authored
      It doesn't make any immediate difference to PostgreSQL, but might as well
      follow the standard, since one exists. (I looked at RFC 5803 earlier, but
      didn't fully understand it back then.)
      
      The new format uses Base64 instead of hex to encode StoredKey and
      ServerKey, which makes the verifiers slightly smaller. Using the same
      encoding for the salt and the keys also means that you only need one
      encoder/decoder instead of two. Although we have code in the backend to
      do both, we are talking about teaching libpq how to create SCRAM verifiers
      for PQencodePassword(), and libpq doesn't currently have any code for hex
      encoding.
      
      Bump catversion, because this renders any existing SCRAM verifiers in
      pg_authid invalid.
      
      Discussion: https://www.postgresql.org/message-id/351ba574-85ea-d9b8-9689-8c928dd0955d@iki.fi
      68e61ee7
    • Peter Eisentraut's avatar
      doc: Fix typo · c29a752c
      Peter Eisentraut authored
      c29a752c
    • Tom Lane's avatar
      Remove long-obsolete catering for platforms without F_SETFD/FD_CLOEXEC. · 536d47bd
      Tom Lane authored
      SUSv2 mandates that <fcntl.h> provide both F_SETFD and FD_CLOEXEC,
      so it seems pretty unlikely that any platforms remain without those.
      Remove the #ifdef-ery installed by commit 7627b91c to see if the
      buildfarm agrees.
      
      Discussion: https://postgr.es/m/21444.1492798101@sss.pgh.pa.us
      536d47bd
    • Peter Eisentraut's avatar
      Synchronize table list before creating slot in CREATE SUBSCRIPTION · dcb39c37
      Peter Eisentraut authored
      This way a failure to synchronize the table list will not leave an
      unused slot on the publisher.
      
      Author: Petr Jelinek <petr.jelinek@2ndquadrant.com>
      dcb39c37
  5. 20 Apr, 2017 7 commits
    • Tom Lane's avatar
      Add missing erand48.c to libpq/.gitignore. · 77c316be
      Tom Lane authored
      Oversight in commit 818fd4a6.  While at it, sync order of file list
      in .gitignore with those in the Makefile.
      77c316be
    • Alvaro Herrera's avatar
      Improve multivariate statistics documentation · 919f6d74
      Alvaro Herrera authored
      Extended statistics commit 7b504eb2 did not include appropriate
      documentation next to where we document regular planner statistics (I
      ripped what was submitted before commit and then forgot to put it back),
      and while later commit 2686ee1b added some material, it structurally
      depended on what I had ripped out, so the end result wasn't proper.
      
      Fix those problems by shuffling what was added by 2686ee1b and
      including some additional material, so that now chapter 14 "Performance
      Tips" now describes the types of multivariate statistics we currently
      have, and chapter 68 "How the Planner Uses Statistics" shows some
      examples.  The new text should be more in line with previous material,
      in (hopefully) the appropriate depth.
      
      While at it, fix a small bug in pg_statistic_ext docs: one column was
      listed in the wrong spot.
      919f6d74
    • Tom Lane's avatar
      Sync pg_ctl documentation and usage message with reality. · 8bcb31ad
      Tom Lane authored
      Commit 05cd12ed ("pg_ctl: Change default to wait for all actions")
      was a tad sloppy about updating the documentation to match.  The
      documentation was also sorely in need of a copy-editing pass, having
      been adjusted at different times by different people who took little
      care to maintain consistency of style.
      8bcb31ad
    • Peter Eisentraut's avatar
      Modify message when partitioned table is added to publication · 594b526b
      Peter Eisentraut authored
      Give a more specific error message than "xyz is not a table".
      
      Also document in CREATE PUBLICATION which kinds of relations are not
      supported.
      
      based on patch by Amit Langote <Langote_Amit_f8@lab.ntt.co.jp>
      594b526b
    • Fujii Masao's avatar
      Prevent log_replication_commands from causing SQL commands to be logged. · 3a66581d
      Fujii Masao authored
      Commit 7c4f5240 allowed walsender to execute normal SQL commands
      to support table sync feature in logical replication. Previously
      while log_statement caused such SQL commands to be logged,
      log_replication_commands caused them to be logged, too.
      That is, such SQL commands were logged twice unexpectedly
      when those settings were both enabled.
      
      This commit forces log_replication_commands to log only replication
      commands, to prevent normal SQL commands from being logged twice.
      
      Author: Masahiko Sawada
      Reviewed-by: Kyotaro Horiguchi
      Reported-by: Fujii Masao
      Discussion: http://postgr.es/m/CAHGQGwFDWh_Qr-q_GEMpD+qH=vYPMdVqw=ZOSY3kX_Pna9R9SA@mail.gmail.com
      3a66581d
    • Fujii Masao's avatar
      Mark some columns in pg_subscription as NOT NULL. · 88b0a319
      Fujii Masao authored
      In pg_subscription, subconninfo, subslotname, subsynccommit and
      subpublications are expected not to be NULL. Therefore this patch
      adds BKI_FORCE_NOT_NULL markings to them.
      
      This patch is basically unnecessary unless the code has a bug which
      wrongly sets either of those columns to NULL. But it's good to have
      this as a safeguard.
      
      Author: Masahiko Sawada
      Reviewed-by: Kyotaro Horiguchi
      Reported-by: Fujii Masao
      Discussion: http://postgr.es/m/CAHGQGwFDWh_Qr-q_GEMpD+qH=vYPMdVqw=ZOSY3kX_Pna9R9SA@mail.gmail.com
      88b0a319
    • Fujii Masao's avatar
      Don't call the function that may raise an error while holding spinlock. · 8bbc618b
      Fujii Masao authored
      It's not safe to raise an error while holding spinlock. But previously
      logical replication worker for table sync called the function which
      reads the system catalog and may raise an error while it's holding
      spinlock. Which could lead to the trouble where spinlock will never
      be released and the server gets stuck infinitely.
      
      Author: Petr Jelinek
      Reviewed-by: Kyotaro Horiguchi and Fujii Masao
      Reported-by: Fujii Masao
      Discussion: http://postgr.es/m/CAHGQGwFDWh_Qr-q_GEMpD+qH=vYPMdVqw=ZOSY3kX_Pna9R9SA@mail.gmail.com
      8bbc618b
  6. 19 Apr, 2017 1 commit
  7. 18 Apr, 2017 11 commits