1. 12 Apr, 2015 3 commits
  2. 10 Apr, 2015 2 commits
    • Alvaro Herrera's avatar
      Optimize locking a tuple already locked by another subxact · 27846f02
      Alvaro Herrera authored
      Locking and updating the same tuple repeatedly led to some strange
      multixacts being created which had several subtransactions of the same
      parent transaction holding locks of the same strength.  However,
      once a subxact of the current transaction holds a lock of a given
      strength, it's not necessary to acquire the same lock again.  This made
      some coding patterns much slower than required.
      
      The fix is twofold.  First we change HeapTupleSatisfiesUpdate to return
      HeapTupleBeingUpdated for the case where the current transaction is
      already a single-xid locker for the given tuple; it used to return
      HeapTupleMayBeUpdated for that case.  The new logic is simpler, and the
      change to pgrowlocks is a testament to that: previously we needed to
      check for the single-xid locker separately in a very ugly way.  That
      test is simpler now.
      
      As fallout from the HTSU change, some of its callers need to be amended
      so that tuple-locked-by-own-transaction is taken into account in the
      BeingUpdated case rather than the MayBeUpdated case.  For many of them
      there is no difference; but heap_delete() and heap_update now check
      explicitely and do not grab tuple lock in that case.
      
      The HTSU change also means that routine MultiXactHasRunningRemoteMembers
      introduced in commit 11ac4c73 is no longer necessary and can be
      removed; the case that used to require it is now handled naturally as
      result of the changes to heap_delete and heap_update.
      
      The second part of the fix to the performance issue is to adjust
      heap_lock_tuple to avoid the slowness:
      
      1. Previously we checked for the case that our own transaction already
      held a strong enough lock and returned MayBeUpdated, but only in the
      multixact case.  Now we do it for the plain Xid case as well, which
      saves having to LockTuple.
      
      2. If the current transaction is the only locker of the tuple (but with
      a lock not as strong as what we need; otherwise it would have been
      caught in the check mentioned above), we can skip sleeping on the
      multixact, and instead go straight to create an updated multixact with
      the additional lock strength.
      
      3. Most importantly, make sure that both the single-xid-locker case and
      the multixact-locker case optimization are applied always.  We do this
      by checking both in a single place, rather than them appearing in two
      separate portions of the routine -- something that is made possible by
      the HeapTupleSatisfiesUpdate API change.  Previously we would only check
      for the single-xid case when HTSU returned MayBeUpdated, and only
      checked for the multixact case when HTSU returned BeingUpdated.  This
      was at odds with what HTSU actually returned in one case: if our own
      transaction was locker in a multixact, it returned MayBeUpdated, so the
      optimization never applied.  This is what led to the large multixacts in
      the first place.
      
      Per bug report #8470 by Oskari Saarenmaa.
      27846f02
    • Peter Eisentraut's avatar
      libpq: Don't overwrite existing OpenSSL thread callbacks · 8a0d34e4
      Peter Eisentraut authored
      If someone else already set the callbacks, don't overwrite them with
      ours.  When unsetting the callbacks, only unset them if they point to
      ours.
      
      Author: Jan Urbański <wulczer@wulczer.org>
      8a0d34e4
  3. 09 Apr, 2015 7 commits
  4. 08 Apr, 2015 8 commits
  5. 07 Apr, 2015 5 commits
    • Tom Lane's avatar
      Fix assorted inconsistent function declarations. · 393de3a0
      Tom Lane authored
      While gcc doesn't complain if you declare a function "static" and then
      define it not-static, other compilers do; and in any case the code is
      highly misleading this way.  Add the missing "static" keywords to a
      couple of recent patches.  Per buildfarm member pademelon.
      393de3a0
    • Heikki Linnakangas's avatar
      Fix reporting of missing or invalid command line arguments in pg_rewind. · ee075fcb
      Heikki Linnakangas authored
      pg_fatal never returns, so a multi-line message cannot be printed by
      calling it twice.
      
      Michael Paquier and Fujii Masao
      ee075fcb
    • Alvaro Herrera's avatar
      Remove variable shadowing · 4e17e32f
      Alvaro Herrera authored
      Commit a2e35b53 should have removed the variable declaration in the
      inner block, but didn't.  As a result, the returned address might end up
      not being what was intended.
      4e17e32f
    • Heikki Linnakangas's avatar
      Fix process startup in pg_rewind. · 8a06c36a
      Heikki Linnakangas authored
      Don't allow pg_rewind to run as root on Unix platforms, as any new or
      replaced files in the data directory would become owned by root. On Windows,
      it can run under a user that has Administrator rights, but a restricted
      token needs to be used. This is the same we do e.g. in pg_resetxlog.
      
      Also, add missing set_pglocale_pgservice() call, to fix localization.
      
      Michael Paquier and Fujii Masao
      8a06c36a
    • Simon Riggs's avatar
      Fix spelling of author's name · 1cdf4d0b
      Simon Riggs authored
      1cdf4d0b
  6. 06 Apr, 2015 3 commits
    • Alvaro Herrera's avatar
      pg_event_trigger_dropped_objects: add is_temp column · e9a077ca
      Alvaro Herrera authored
      It now also reports temporary objects dropped that are local to the
      backend.  Previously we weren't reporting any temp objects because it
      was deemed unnecessary; but as it turns out, it is necessary if we want
      to keep close track of DDL command execution inside one session.  Temp
      objects are reported as living in schema pg_temp, which works because
      such a schema-qualification always refers to the temp objects of the
      current session.
      e9a077ca
    • Alvaro Herrera's avatar
      Fix object identities for pg_conversion objects · 70dc2db7
      Alvaro Herrera authored
      This was already fixed in 0d906798, but I failed to update the
      array-formatted case.  This is not backpatched, since this only affects
      the code path introduced by commit a6762014.
      70dc2db7
    • Fujii Masao's avatar
      Fix typo in libpq.sgml. · 5f6a9d05
      Fujii Masao authored
      Back-patch to all supported versions.
      
      Michael Paquier
      5f6a9d05
  7. 05 Apr, 2015 5 commits
    • Tom Lane's avatar
      Suppress clang's unhelpful gripes about -pthread switch being unused. · 73b416b2
      Tom Lane authored
      Considering the number of cases in which "unused" command line arguments
      are silently ignored by compilers, it's fairly astonishing that anybody
      thought this warning was useful; it's certainly nothing but an annoyance
      when building Postgres.  One such case is that neither gcc nor clang
      complain about unrecognized -Wno-foo switches, making it more difficult
      to figure out whether the switch does anything than one could wish.
      
      Back-patch to 9.3, which is as far back as the patch applies conveniently
      (we'd have to back-patch PGAC_PROG_CC_VAR_OPT to go further, and it doesn't
      seem worth that).
      73b416b2
    • Simon Riggs's avatar
      Remove extraneous > · e8fde1f6
      Simon Riggs authored
      e8fde1f6
    • Simon Riggs's avatar
      Add new test files for lock level patch · 35ecc244
      Simon Riggs authored
      35ecc244
    • Andrew Dunstan's avatar
      Enable float8-byval as the default for 64 bit MSVC builds · cf376a4a
      Andrew Dunstan authored
      This is a long-standing inconsistency that was probably just missed when
      we got 64 bit MSVC builds. This brings the platform into line with all
      other systems.
      cf376a4a
    • Simon Riggs's avatar
      Reduce lock levels of some trigger DDL and add FKs · 0ef0396a
      Simon Riggs authored
      Reduce lock levels to ShareRowExclusive for the following SQL
       CREATE TRIGGER (but not DROP or ALTER)
       ALTER TABLE ENABLE TRIGGER
       ALTER TABLE DISABLE TRIGGER
       ALTER TABLE … ADD CONSTRAINT FOREIGN KEY
      
      Original work by Simon Riggs, extracted and refreshed by Andreas Karlsson
      New test cases added by Andreas Karlsson
      Reviewed by Noah Misch, Andres Freund, Michael Paquier and Simon Riggs
      0ef0396a
  8. 04 Apr, 2015 3 commits
    • Tom Lane's avatar
      Fix incorrect matching of subexpressions in outer-join plan nodes. · ca680533
      Tom Lane authored
      Previously we would re-use input subexpressions in all expression trees
      attached to a Join plan node.  However, if it's an outer join and the
      subexpression appears in the nullable-side input, this is potentially
      incorrect for apparently-matching subexpressions that came from above
      the outer join (ie, targetlist and qpqual expressions), because the
      executor will treat the subexpression value as NULL when maybe it should
      not be.
      
      The case is fairly hard to hit because (a) you need a non-strict
      subexpression (else NULL is correct), and (b) we don't usually compute
      expressions in the outputs of non-toplevel plan nodes.  But we might do
      so if the expressions are sort keys for a mergejoin, for example.
      
      Probably in the long run we should make a more explicit distinction between
      Vars appearing above and below an outer join, but that will be a major
      planner redesign and not at all back-patchable.  For the moment, just hack
      set_join_references so that it will not match any non-Var expressions
      coming from nullable inputs to expressions that came from above the join.
      (This is somewhat overkill, in that a strict expression could still be
      matched, but it doesn't seem worth the effort to check that.)
      
      Per report from Qingqing Zhou.  The added regression test case is based
      on his example.
      
      This has been broken for a very long time, so back-patch to all active
      branches.
      ca680533
    • Tom Lane's avatar
      Fix TAP tests to use only standard command-line argument ordering. · c67a86f7
      Tom Lane authored
      Some of the TAP tests were supposing that PG programs would accept switches
      after non-switch arguments on their command lines.  While GNU getopt_long()
      does allow that, our own implementation does not, and it's nowhere
      suggested in our documentation that such cases should work.  Adjust the
      tests to use only the documented syntax.
      
      Back-patch to 9.4, since without this the TAP tests fail when run with
      src/port's getopt_long() implementation.
      
      Michael Paquier
      c67a86f7
    • Robert Haas's avatar
      Fix numeric abbreviation for --disable-float8-byval. · 368b7c60
      Robert Haas authored
      When committing abd94bca, I tried to make
      it decide what kind of abbreviation to use based only on SIZEOF_DATUM,
      without regard to USE_FLOAT8_BYVAL.  That attempt was a few bricks short
      of a load, so try to fix it, and add a comment explaining what we're
      about.
      
      Patch by me; review (but not a full endorsement) by Andrew Gierth.
      368b7c60
  9. 03 Apr, 2015 4 commits
    • Tom Lane's avatar
      Remove unnecessary variables in _hash_splitbucket(). · b7e1652d
      Tom Lane authored
      Commit ed9cc2b5 made it unnecessary to pass
      start_nblkno to _hash_splitbucket(), and for that matter unnecessary to
      have the internal nblkno variable either.  My compiler didn't complain
      about that, but some did.  I also rearranged the use of oblkno a bit to
      make that case more parallel.
      
      Report and initial patch by Petr Jelinek, rearranged a bit by me.
      Back-patch to all branches, like the previous patch.
      b7e1652d
    • Alvaro Herrera's avatar
      Transform ALTER TABLE/SET TYPE/USING expr during parse analysis · 9550e834
      Alvaro Herrera authored
      This lets later stages have access to the transformed expression; in
      particular it allows DDL-deparsing code during event triggers to pass
      the transformed expression to ruleutils.c, so that the complete command
      can be deparsed.
      
      This shuffles the timing of the transform calls a bit: previously,
      nothing was transformed during parse analysis, and only the
      RELKIND_RELATION case was being handled during execution.  After this
      patch, all expressions are transformed during parse analysis (including
      those for relkinds other than RELATION), and the error for other
      relation kinds is thrown only during execution.  So we do more work than
      before to reject some bogus cases.  That seems acceptable.
      9550e834
    • Alvaro Herrera's avatar
      Add log_min_autovacuum_duration per-table option · 4ff695b1
      Alvaro Herrera authored
      This is useful to control autovacuum log volume, for situations where
      monitoring only a set of tables is necessary.
      
      Author: Michael Paquier
      Reviewed by: A team led by Naoya Anzai (also including Akira Kurosawa,
      Taiki Kondo, Huong Dangminh), Fujii Masao.
      4ff695b1
    • Alvaro Herrera's avatar
      Have autovacuum workers listen to SIGHUP, too · a75fb9b3
      Alvaro Herrera authored
      They have historically ignored it, but it's been said to be useful at
      times to change their settings mid-flight.
      
      Author: Michael Paquier
      a75fb9b3