1. 03 Jun, 2014 5 commits
    • Andrew Dunstan's avatar
      Do not escape a unicode sequence when escaping JSON text. · 0ad1a816
      Andrew Dunstan authored
      Previously, any backslash in text being escaped for JSON was doubled so
      that the result was still valid JSON. However, this led to some perverse
      results in the case of Unicode sequences, These are now detected and the
      initial backslash is no longer escaped. All other backslashes are
      still escaped. No validity check is performed, all that is looked for is
      \uXXXX where X is a hexidecimal digit.
      
      This is a change from the 9.2 and 9.3 behaviour as noted in the Release
      notes.
      
      Per complaint from Teodor Sigaev.
      0ad1a816
    • Andrew Dunstan's avatar
      Output timestamps in ISO 8601 format when rendering JSON. · f30015b6
      Andrew Dunstan authored
      Many JSON processors require timestamp strings in ISO 8601 format in
      order to convert the strings. When converting a timestamp, with or
      without timezone, to a JSON datum we therefore now use such a format
      rather than the type's default text output, in functions such as
      to_json().
      
      This is a change in behaviour from 9.2 and 9.3, as noted in the release
      notes.
      f30015b6
    • Tom Lane's avatar
      Make plpython_unicode regression test work in more database encodings. · 2dfa15de
      Tom Lane authored
      This test previously used a data value containing U+0080, and would
      therefore fail if the database encoding didn't have an equivalent to
      that; which only about half of our supported server encodings do.
      We could fall back to using some plain-ASCII character, but that seems
      like it's losing most of the point of the test.  Instead switch to using
      U+00A0 (no-break space), which translates into all our supported encodings
      except the four in the EUC_xx family.
      
      Per buildfarm testing.  Back-patch to 9.1, which is as far back as this
      test is expected to succeed everywhere.  (9.0 has the test, but without
      back-patching some 9.1 code changes we could not expect to get consistent
      results across platforms anyway.)
      2dfa15de
    • Andres Freund's avatar
      Set the process latch when processing recovery conflict interrupts. · 44445b28
      Andres Freund authored
      Because RecoveryConflictInterrupt() didn't set the process latch
      anything using the latter to wait for events didn't get notified about
      recovery conflicts. Most latch users are never the target of recovery
      conflicts, which explains the lack of reports about this until
      now.
      Since 9.3 two possible affected users exist though: The sql callable
      pg_sleep() now uses latches to wait and background workers are
      expected to use latches in their main loop. Both would currently wait
      until the end of WaitLatch's timeout.
      
      Fix by adding a SetLatch() to RecoveryConflictInterrupt(). It'd also
      be possible to fix the issue by having each latch user set
      set_latch_on_sigusr1. That seems failure prone and though, as most of
      these callsites won't often receive recovery conflicts and thus will
      likely only be tested against normal query cancels et al. It'd also be
      unnecessarily verbose.
      
      Backpatch to 9.1 where latches were introduced. Arguably 9.3 would be
      sufficient, because that's where pg_sleep() was converted to waiting
      on the latch and background workers got introduced; but there could be
      user level code making use of the latch pre 9.3.
      44445b28
    • Andres Freund's avatar
      Use unaligned output in another regression test query to reduce diff noise. · 5eebb8d9
      Andres Freund authored
      Use the unaligned/no rowcount output mode in a regression tests that
      shows all built-in leakproof functions. Currently a new leakproof
      function will often change the alignment of all existing functions,
      making it hard to see the actual difference and creating unnecessary
      patch conflicts.
      
      Noticed while looking over a patch introducing new leakproof functions.
      5eebb8d9
  2. 02 Jun, 2014 1 commit
  3. 01 Jun, 2014 1 commit
    • Andrew Dunstan's avatar
      Improve the efficiency of certain jsonb get operations. · 1a4174a4
      Andrew Dunstan authored
      Instead of iterating over jsonb structures, use the inbuilt functions
      findJsonbValueFromContainerLen() and getIthJsonbValueFromContainer() to
      extract values directly. These functions use algorithms that are O(n log
      n) and O(1) respectively, whereas iterating is O(n), so we should see
      considerable speedup here.
      
      Teodor Sigaev.
      1a4174a4
  4. 31 May, 2014 1 commit
    • Andres Freund's avatar
      Improvements to the replication protocol documentation. · a5750982
      Andres Freund authored
      Document the CREATE_REPLICATION_SLOT's output_plugin parameter; that
      START_REPLICATION ... LOGICAL takes parameters; that START_REPLICATION
      ... LOGICAL uses the same messages as ... PHYSICAL; and be more
      consistent with the usage of <literal/>.
      
      Michael Paquier, with some additional changes by me.
      a5750982
  5. 30 May, 2014 3 commits
    • Tom Lane's avatar
      On OS X, link libpython normally, ignoring the "framework" framework. · 20561acf
      Tom Lane authored
      As of Xcode 5.0, Apple isn't including the Python framework as part of the
      SDK-level files, which means that linking to it might fail depending on
      whether Xcode thinks you've selected a specific SDK version.  According to
      their Tech Note 2328, they've basically deprecated the framework method of
      linking to libpython and are telling people to link to the shared library
      normally.  (I'm pretty sure this is in direct contradiction to the advice
      they were giving a few years ago, but whatever.)  Testing says that this
      approach works fine at least as far back as OS X 10.4.11, so let's just
      rip out the framework special case entirely.  We do still need a special
      case to decide that OS X provides a shared library at all, unfortunately
      (I wonder why the distutils check doesn't work ...).  But this is still
      less of a special case than before, so it's fine.
      
      Back-patch to all supported branches, since we'll doubtless be hearing
      about this more as more people update to recent Xcode.
      20561acf
    • Heikki Linnakangas's avatar
      Fix typos in MSVC solution file. · 512f3b03
      Heikki Linnakangas authored
      Michael Paquier
      512f3b03
    • Robert Haas's avatar
      In release notes, mention the need to initialize bgw_notify_pid. · 42be7d69
      Robert Haas authored
      Michael Paquier
      42be7d69
  6. 29 May, 2014 2 commits
    • Tom Lane's avatar
      When using the OSSP UUID library, cache its uuid_t state object. · c941aed9
      Tom Lane authored
      The original coding in contrib/uuid-ossp created and destroyed a uuid_t
      object (or, in some cases, even two of them) each time it was called.
      This is not the intended usage: you're supposed to keep the uuid_t object
      around so that the library can cache its state across uses.  (Other UUID
      libraries seem to keep equivalent state behind-the-scenes in static
      variables, but OSSP chose differently.)  Aside from being quite inefficient,
      creating a new uuid_t loses knowledge of the previously generated UUID,
      which in theory could result in duplicate V1-style UUIDs being created
      on sufficiently fast machines.
      
      On at least some platforms, creating a new uuid_t also draws some entropy
      from /dev/urandom, leaving less for the rest of the system.  This seems
      sufficiently unpleasant to justify back-patching this change.
      c941aed9
    • Tom Lane's avatar
      Fix uuid-ossp regression tests based on buildfarm feedback. · 25dd07e0
      Tom Lane authored
      The previous version of these tests expected uuid_generate_v1() to always
      emit MAC addresses with the local-admin and multicast address bits zero.
      However, several of the buildfarm critters are reporting values with the
      local-admin bit set.  (Perhaps they're running inside VMs or jails.)
      And a couple are reporting values with the multicast bit set, probably
      meaning that the UUID library couldn't read the system MAC address.
      
      Also, it emerges that if OSSP UUID can't read the system MAC address, it
      falls back to V1MC behavior wherein the whole node field gets randomized
      each time, breaking the test that expected the node field to remain stable
      in V1 output.  (It looks like e2fs doesn't behave that way, though.)
      
      It's not entirely clear why we can't get a system MAC address, since the
      buildfarm scripts would not work without internet access.  Nonetheless,
      the regression tests had better cope with the case, so adjust the tests
      to expect these behaviors.
      25dd07e0
  7. 28 May, 2014 13 commits
    • Tom Lane's avatar
      Revert "Fix bogus %name-prefix option syntax in all our Bison files." · 71ed8b3c
      Tom Lane authored
      This reverts commit 45b7abe5.
      
      It turns out that the %name-prefix syntax without "=" does not work
      at all in pre-2.4 Bison.  We are not prepared to make such a large
      jump in minimum required Bison version just to suppress a warning
      message in a version hardly any developers are using yet.
      When 3.0 gets more popular, we'll figure out a way to deal with this.
      In the meantime, BISONFLAGS=-Wno-deprecated is recommendable for
      anyone using 3.0 who doesn't want to see the warning.
      71ed8b3c
    • Andres Freund's avatar
      Don't pay heed to wal_sender_timeout while creating a decoding slot. · 21d48d66
      Andres Freund authored
      Sometimes CREATE_REPLICATION_SLOT ... LOGICAL ... needs to wait for
      further WAL using WalSndWaitForWal(). That used to always respect
      wal_sender_timeout and kill the session when waiting long enough
      because no feedback/ping messages can be sent while the slot is still
      being created.
      Introduce the notion that last_reply_timestamp = 0 means that the
      walsender currently doesn't need timeout processing to avoid that
      problem. Use that notion for CREATE_REPLICATION_SLOT ... LOGICAL.
      
      Bugreport and initial patch by Steve Singer, revised by me.
      21d48d66
    • Heikki Linnakangas's avatar
      Minor refactoring of jsonb_util.c · d1d50bff
      Heikki Linnakangas authored
      The only caller of compareJsonbScalarValue that needed locale-sensitive
      comparison of strings was also the only caller that didn't just check for
      equality. Separate the two cases for clarity: compareJsonbScalarValue now
      does locale-sensitive comparison, and a new function,
      equalsJsonbScalarValue, just checks for equality.
      d1d50bff
    • Heikki Linnakangas's avatar
      Jsonb comparison bug fixes. · b3e5cfd5
      Heikki Linnakangas authored
      Fix an over-zealous assertion, which didn't take into account that sometimes
      a scalar element can be compared against an array/object element.
      
      Avoid comparing possibly-uninitialized local variables when end-of-array or
      end-of-object is reached. Also fix and enhance comments a bit.
      
      Peter Geoghegan, per reports by Pavel Stehule and me.
      b3e5cfd5
    • Tom Lane's avatar
      Fix bogus %name-prefix option syntax in all our Bison files. · 45b7abe5
      Tom Lane authored
      %name-prefix doesn't use an "=" sign according to the Bison docs, but it
      silently accepted one anyway, until Bison 3.0.  This was originally a
      typo of mine in commit 012abeba, and we
      seem to have slavishly copied the error into all the other grammar files.
      
      Per report from Vik Fearing; analysis by Peter Eisentraut.
      
      Back-patch to all active branches, since somebody might try to build
      a back branch with up-to-date tools.
      45b7abe5
    • Tom Lane's avatar
      Improve regression tests for uuid-ossp. · c0f27628
      Tom Lane authored
      On reflection, the timestamp-advances test might fail if we're unlucky
      enough for the time_mid field to change between two calls, since uuid_cmp
      is just bytewise comparison and the field ordering has more significant
      fields later.  Build some field extraction functions so we can do a more
      honest test of that.  Also check that the version and reserved fields
      contain what they should.
      c0f27628
    • Tom Lane's avatar
      Fix stack clobber in new uuid-ossp code. · 2103218d
      Tom Lane authored
      The V5 (SHA1 hashing) code wrote 20 bytes into a 16-byte local variable.
      This had accidentally failed to fail in my testing and Matteo's, but
      buildfarm results exposed the problem.
      2103218d
    • Magnus Hagander's avatar
      Ensure cleanup in case of early errors in streaming base backups · 8232d6df
      Magnus Hagander authored
      Move the code that sends the initial status information as well as the
      calculation of paths inside the ENSURE_ERROR_CLEANUP block. If this code
      failed, we would "leak" a counter of number of concurrent backups, thereby
      making the system always believe it was in backup mode. This could happen
      if the sending failed (which it probably never did given that the small
      amount of data to send would never cause a flush) or if the psprintf calls
      ran out of memory. Both are very low risk, but all operations after
      do_pg_start_backup should be protected.
      8232d6df
    • Bruce Momjian's avatar
      c6763156
    • Tom Lane's avatar
      pg_lsn should not be marked typispreferred. · ec3357a3
      Tom Lane authored
      In general it's not a good idea for built-in types in the 'U' category
      to be marked preferred; they could draw behavior away from user-defined
      types with similarly-named operators.  pg_lsn is probably at low risk
      of that right now given the lack of casts between it and other types,
      but that doesn't make this marking OK.
      
      Ordinarily we'd bump catversion when changing any predefined catalog
      contents like this, but since we're past beta1, the costs of a forced
      initdb seem to outweigh the benefits of guaranteed behavioral consistency.
      There's not any known behavioral impact today anyway --- this is more
      in the nature of being sure there's not problems in future.
      
      Per an off-list complaint from Thomas Fanghaenel.
      ec3357a3
    • Tom Lane's avatar
      Fix obsolete config-module-exclusion logic in vcregress.pl. · 86000311
      Tom Lane authored
      The recent addition of regression tests to uuid-ossp exposed the fact
      that the MSVC build system wasn't being consistent about whether it was
      building/testing that contrib module, ie, it would try to test the module
      even when it hadn't built it.  The same hazard was latent for sslinfo.
      
      For the moment I just copied the more up-to-date logic from point A to
      point B, but this is screaming for refactoring.
      
      Per buildfarm results.
      86000311
    • Tom Lane's avatar
      Propagate system identifier generation improvement into pg_resetxlog. · 4bcb3946
      Tom Lane authored
      Commit 5035701e improved xlog.c's method
      for creating a database system identifier, but I neglected to fix the
      copy of that code appearing in pg_resetxlog.c.  Spotted by Andres Freund.
      4bcb3946
    • Bruce Momjian's avatar
      doc: improve ssl_ecdh_curve descriptions · 49cf2cd8
      Bruce Momjian authored
      Patch by Marko Kreen
      49cf2cd8
  8. 27 May, 2014 3 commits
    • Tom Lane's avatar
      Support BSD and e2fsprogs UUID libraries alongside OSSP UUID library. · b8cc8f94
      Tom Lane authored
      Allow the contrib/uuid-ossp extension to be built atop any one of these
      three popular UUID libraries.  (The extension's name is now arguably a
      misnomer, but we'll keep it the same so as not to cause unnecessary
      compatibility issues for users.)
      
      We would not normally consider a change like this post-beta1, but the issue
      has been forced by our upgrade to autoconf 2.69, whose more rigorous header
      checks are causing OSSP's header files to be rejected on some platforms.
      It's been foreseen for some time that we'd have to move away from depending
      on OSSP UUID due to lack of upstream maintenance, so this is a down payment
      on that problem.
      
      While at it, add some simple regression tests, in hopes of catching any
      major incompatibilities between the three implementations.
      
      Matteo Beccati, with some further hacking by me
      b8cc8f94
    • Robert Haas's avatar
      worker_spi: Initialize bgw_notify_pid in all cases. · 616afee1
      Robert Haas authored
      Commit 090d0f20 added new code showing
      how it can be useful to set bgw_notify_pid to a non-zero value, but it
      failed to make sure that the existing call to RegisterBackgroundWorker
      initialized the new field at all.
      
      Report and patch by Shigeru Hanada.
      616afee1
    • Tom Lane's avatar
      Avoid unportable usage of sscanf(UINT64_FORMAT). · 9d7ded0f
      Tom Lane authored
      On Mingw, it seems that scanf() doesn't necessarily accept the same format
      codes that printf() does, and in particular it may fail to recognize %llu
      even though printf() does.  Since configure only probes printf() behavior
      while setting up the INT64_FORMAT macros, this means it's unsafe to use
      those macros with scanf().  We had only one instance of such a coding
      pattern, in contrib/pg_stat_statements, so change that code to avoid
      the problem.
      
      Per buildfarm warnings.  Back-patch to 9.0 where the troublesome code
      was introduced.
      
      Michael Paquier
      9d7ded0f
  9. 26 May, 2014 2 commits
  10. 25 May, 2014 3 commits
    • Heikki Linnakangas's avatar
      Fix error when trying to delete page with half-dead left sibling. · 8da31837
      Heikki Linnakangas authored
      The new page deletion code didn't cope with the case the target page's
      right sibling was marked half-dead. It failed a sanity check which checked
      that the downlinks in the parent page match the lower level, because a
      half-dead page has no downlink. To cope, check for that condition, and
      just give up on the deletion if it happens. The vacuum will finish the
      deletion of the half-dead page when it gets there, and on the next vacuum
      after that the empty can be deleted.
      
      Reported by Jeff Janes.
      8da31837
    • Tom Lane's avatar
      Allow total number of transactions in pgbench to exceed INT_MAX. · 9a65fb35
      Tom Lane authored
      Change the total-transactions counters from int32 to int64 to accommodate
      cases where we do more than 2^31 transactions during a run.  This patch
      does not change the INT_MAX limit on explicit "-t" parameters, but it
      does allow the product of the -t and -c parameters to exceed INT_MAX, or
      allow a -T limit that is large enough that more than 2^31 transactions
      can be completed.  While pgbench did not actually fail in such cases,
      it did print an incorrect total-transactions count, and some of the
      derived numbers such as TPS would have been wrong as well.
      
      Tomas Vondra
      9a65fb35
    • Andres Freund's avatar
      Don't allocate memory inside an Assert() iff in a critical section. · 9fa93530
      Andres Freund authored
      HeapTupleHeaderGetCmax() asserts that it is only used if the tuple has
      been updated by the current transaction. That check is correct and
      sensible but requires allocating memory if xmax is a multixact. When
      wal_level is set to logical cmax needs to be included in a wal record
      , generated inside a critical section, which can trigger the assertion
      added in 4a170ee9.
      
      Reported-By: Steve Singer
      9fa93530
  11. 24 May, 2014 1 commit
    • Andres Freund's avatar
      Silence a couple of spurious valgrind warnings in inval.c. · 0564bbe7
      Andres Freund authored
      Define padding bytes in SharedInvalidationMessage structs to be
      defined. Otherwise the sinvaladt.c ringbuffer, which is accessed by
      multiple processes, will cause spurious valgrind warnings about
      undefined memory being used. That's because valgrind remembers the
      undefined bytes from the last local process's store, not realizing
      that another process has written since, filling the previously
      uninitialized bytes.
      0564bbe7
  12. 23 May, 2014 2 commits
  13. 22 May, 2014 3 commits