1. 03 Aug, 2011 1 commit
    • Robert Haas's avatar
      Make pgbench use erand48() rather than random(). · 4af43ee3
      Robert Haas authored
      glibc renders random() thread-safe by wrapping a futex lock around it;
      testing reveals that this limits the performance of pgbench on machines
      with many CPU cores.  Rather than switching to random_r(), which is
      only available on GNU systems and crashes unless you use undocumented
      alchemy to initialize the random state properly, switch to our built-in
      implementation of erand48(), which is both thread-safe and concurrent.
      
      Since the list of reasons not to use the operating system's erand48()
      is getting rather long, rename ours to pg_erand48() (and similarly
      for our implementations of lrand48() and srand48()) and just always
      use those.  We were already doing this on Cygwin anyway, and the
      glibc implementation is not quite thread-safe, so pgbench wouldn't
      be able to use that either.
      
      Per discussion with Tom Lane.
      4af43ee3
  2. 02 Aug, 2011 3 commits
    • Tom Lane's avatar
      Move CheckRecoveryConflictDeadlock() call to a safer place. · ac36e6f7
      Tom Lane authored
      This kluge was inserted in a spot apparently chosen at random: the lock
      manager's state is not yet fully set up for the wait, and in particular
      LockWaitCancel hasn't been armed by setting lockAwaited, so the ProcLock
      will not get cleaned up if the ereport is thrown.  This seems to not cause
      any observable problem in trivial test cases, because LockReleaseAll will
      silently clean up the debris; but I was able to cause failures with tests
      involving subtransactions.
      
      Fixes breakage induced by commit c85c9414.
      Back-patch to all affected branches.
      ac36e6f7
    • Tom Lane's avatar
      Fix incorrect initialization of ProcGlobal->startupBufferPinWaitBufId. · 2e53bd55
      Tom Lane authored
      It was initialized in the wrong place and to the wrong value.  With bad
      luck this could result in incorrect query-cancellation failures in hot
      standby sessions, should a HS backend be holding pin on buffer number 1
      while trying to acquire a lock.
      2e53bd55
    • Heikki Linnakangas's avatar
      Avoid integer overflow when LIMIT + OFFSET >= 2^63. · 89df948e
      Heikki Linnakangas authored
      This fixes bug #6139 reported by Hitoshi Harada.
      89df948e
  3. 01 Aug, 2011 1 commit
  4. 31 Jul, 2011 1 commit
  5. 30 Jul, 2011 1 commit
  6. 29 Jul, 2011 2 commits
  7. 28 Jul, 2011 1 commit
    • Tom Lane's avatar
      Fix pg_restore's direct-to-database mode for standard_conforming_strings. · 6545a901
      Tom Lane authored
      pg_backup_db.c contained a mini SQL lexer with which it tried to identify
      boundaries between SQL commands, but that code was not designed to cope
      with standard_conforming_strings, and would get the wrong answer if a
      backslash immediately precedes a closing single quote in such a string,
      as per report from Julian Mehnle.  The bug only affects direct-to-database
      restores from archive files made with standard_conforming_strings = on.
      
      Rather than complicating the code some more to try to fix that, let's just
      rip it all out.  The only reason it was needed was to cope with COPY data
      embedded into ordinary archive entries, which was a layout that was used
      only for about the first three weeks of the archive format's existence,
      and never in any production release of pg_dump.  Instead, just rely on the
      archive file layout to tell us whether we're printing COPY data or not.
      
      This bug represents a data corruption hazard in all releases in which
      standard_conforming_strings can be turned on, ie 8.2 and later, so
      back-patch to all supported branches.
      6545a901
  8. 27 Jul, 2011 2 commits
  9. 26 Jul, 2011 6 commits
  10. 25 Jul, 2011 6 commits
  11. 24 Jul, 2011 3 commits
    • Tom Lane's avatar
      Improve libpq's error reporting for SSL failures. · fee476da
      Tom Lane authored
      In many cases, pqsecure_read/pqsecure_write set up useful error messages,
      which were then overwritten with useless ones by their callers.  Fix this
      by defining the responsibility to set an error message to be entirely that
      of the lower-level function when using SSL.
      
      Back-patch to 8.3; the code is too different in 8.2 to be worth the
      trouble.
      fee476da
    • Tom Lane's avatar
      Use OpenSSL's SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER flag. · d0c23026
      Tom Lane authored
      This disables an entirely unnecessary "sanity check" that causes failures
      in nonblocking mode, because OpenSSL complains if we move or compact the
      write buffer.  The only actual requirement is that we not modify pending
      data once we've attempted to send it, which we don't.  Per testing and
      research by Martin Pihlak, though this fix is a lot simpler than his patch.
      
      I put the same change into the backend, although it's less clear whether
      it's necessary there.  We do use nonblock mode in some situations in
      streaming replication, so seems best to keep the same behavior in the
      backend as in libpq.
      
      Back-patch to all supported releases.
      d0c23026
    • Bruce Momjian's avatar
      In pg_upgrade on Windows, check if the directory is writable by actually · 081a5518
      Bruce Momjian authored
      creating and removing a file because access() doesn't work on that
      platform.
      
      Backpatch to 9.1 where this check was added.
      081a5518
  12. 23 Jul, 2011 3 commits
    • Andrew Dunstan's avatar
    • Peter Eisentraut's avatar
      Change EDITOR_LINENUMBER_SWITCH to an environment variable · 79b3ca06
      Peter Eisentraut authored
      Also change "switch" to "arg" because "switch" is a bit of a sloppy
      term.  So the environment variable is called
      PSQL_EDITOR_LINENUMBER_ARG.  Set "+" as hardcoded default value on
      Unix (since "vi" is the hardcoded default editor), so many users won't
      have to configure this at all.  Move the documentation around a bit to
      centralize the editor configuration under environment variables,
      rather than repeating bits of it under every backslash command that
      invokes an editor.
      79b3ca06
    • Tom Lane's avatar
      Rethink behavior of CREATE OR REPLACE during CREATE EXTENSION. · 988cccc6
      Tom Lane authored
      The original implementation simply did nothing when replacing an existing
      object during CREATE EXTENSION.  The folly of this was exposed by a report
      from Marc Munro: if the existing object belongs to another extension, we
      are left in an inconsistent state.  We should insist that the object does
      not belong to another extension, and then add it to the current extension
      if not already a member.
      988cccc6
  13. 22 Jul, 2011 1 commit
    • Robert Haas's avatar
      Unbreak unlogged tables. · 6f1be5a6
      Robert Haas authored
      I broke this in commit 5da79169, which
      was obviously insufficiently well tested.  Add some regression tests
      in the hope of making future slip-ups more likely to be noticed.
      6f1be5a6
  14. 21 Jul, 2011 3 commits
    • Bruce Momjian's avatar
      In pg_upgrade, add C comment about why we don't try to do shared file · 43aa40e1
      Bruce Momjian authored
      writes for logging.
      43aa40e1
    • Tom Lane's avatar
      Fix PQsetvalue() to avoid possible crash when adding a new tuple. · a9f0dbc3
      Tom Lane authored
      PQsetvalue unnecessarily duplicated the logic in pqAddTuple, and didn't
      duplicate it exactly either --- pqAddTuple does not care what is in the
      tuple-pointer array positions beyond the last valid entry, whereas the
      code in PQsetvalue assumed such positions would contain NULL.  This led
      to possible crashes if PQsetvalue was applied to a PGresult that had
      previously been enlarged with pqAddTuple, for instance one built from a
      server query.  Fix by relying on pqAddTuple instead of duplicating logic,
      and not assuming anything about the contents of res->tuples[res->ntups].
      
      Back-patch to 8.4, where PQsetvalue was introduced.
      
      Andrew Chernow
      a9f0dbc3
    • Tom Lane's avatar
      Make xpath() do something useful with XPath expressions that return scalars. · 0ce7676a
      Tom Lane authored
      Previously, xpath() simply returned an empty array if the expression did
      not yield a node set.  This is useless for expressions that return scalars,
      such as one with name() at the top level.  Arrange to return the scalar
      value as a single-element xml array, instead.  (String values will be
      suitably escaped.)
      
      This change will also cause xpath_exists() to return true, not false,
      for such expressions.
      
      Florian Pflug, reviewed by Radoslaw Smogura
      0ce7676a
  15. 20 Jul, 2011 6 commits
    • Tom Lane's avatar
      Ensure that xpath() escapes special characters in string values. · aaf15e5c
      Tom Lane authored
      Without this it's possible for the output to not be legal XML, as
      illustrated by the added regression test cases.
      
      NB: this change will need to be called out as an incompatibility in the
      9.2 release notes, since it's possible somebody was relying on the old
      behavior, even though it's clearly wrong.
      
      Florian Pflug, reviewed by Radoslaw Smogura
      aaf15e5c
    • Bruce Momjian's avatar
      In pg_upgrade, fix the -l/log option to work on Windows. · 17a16eeb
      Bruce Momjian authored
      Also, double-quote the log file name in all places, to allow (on all
      platforms) log file names with spaces.
      
      Back patch to 9.0 and 9.1.
      17a16eeb
    • Bruce Momjian's avatar
      6b43fdde
    • Robert Haas's avatar
      Support SECURITY LABEL on databases, tablespaces, and roles. · 463f2625
      Robert Haas authored
      This requires a new shared catalog, pg_shseclabel.
      
      Along the way, fix the security_label regression tests so that they
      don't monkey with the labels of any pre-existing objects.  This is
      unlikely to matter in practice, since only the label for the "dummy"
      provider was being manipulated.  But this way still seems cleaner.
      
      KaiGai Kohei, with fairly extensive hacking by me.
      463f2625
    • Tom Lane's avatar
      Rewrite libxml error handling to be more robust. · cacd42d6
      Tom Lane authored
      libxml reports some errors (like invalid xmlns attributes) via the error
      handler hook, but still returns a success indicator to the library caller.
      This causes us to miss some errors that are important to report.  Since the
      "generic" error handler hook doesn't know whether the message it's getting
      is for an error, warning, or notice, stop using that and instead start
      using the "structured" error handler hook, which gets enough information
      to be useful.
      
      While at it, arrange to save and restore the error handler hook setting in
      each libxml-using function, rather than assuming we can set and forget the
      hook.  This should improve the odds of working nicely with third-party
      libraries that also use libxml.
      
      In passing, volatile-ize some local variables that get modified within
      PG_TRY blocks.  I noticed this while testing with an older gcc version
      than I'd previously tried to compile xml.c with.
      
      Florian Pflug and Tom Lane, with extensive review/testing by Noah Misch
      cacd42d6
    • Robert Haas's avatar
      Improve sepgsql and SECURITY LABEL documentation. · d79a601f
      Robert Haas authored
      KaiGai Kohei, based on feedback from Yeb Havinga, with some
      corrections by me.
      d79a601f