1. 03 Oct, 2014 8 commits
    • Tom Lane's avatar
      Update time zone abbreviations lists. · 4f499eee
      Tom Lane authored
      This updates known_abbrevs.txt to be what it should have been already,
      were my -P patch not broken; and updates some tznames/ entries that
      missed getting any love in previous timezone data updates because zic
      failed to flag the change of abbreviation.
      
      The non-cosmetic updates:
      
      * Remove references to "ADT" as "Arabia Daylight Time", an abbreviation
      that's been out of use since 2007; therefore, claiming there is a conflict
      with "Atlantic Daylight Time" doesn't seem especially helpful.  (We have
      left obsolete entries in the files when they didn't conflict with anything,
      but that seems like a different situation.)
      
      * Fix entirely incorrect GMT offsets for CKT (Cook Islands), FJT, FJST
      (Fiji); we didn't even have them on the proper side of the date line.
      (Seems to have been aboriginal errors in our tznames data; there's no
      evidence anything actually changed recently.)
      
      * FKST (Falkland Islands Summer Time) is now used all year round, so
      don't mark it as a DST abbreviation.
      
      * Update SAKT (Sakhalin) to mean GMT+11 not GMT+10.
      
      In cosmetic changes, I fixed a bunch of wrong (or at least obsolete)
      claims about abbreviations not being present in the zic files, and
      tried to be consistent about how obsolete abbreviations are labeled.
      
      Note the underlying timezone/data files are still at release 2014e;
      this is just trying to get us in sync with what those files actually
      say before we go to the next update.
      4f499eee
    • Stephen Frost's avatar
      Fix CreatePolicy, pg_dump -v; psql and doc updates · 78d72563
      Stephen Frost authored
      Peter G pointed out that valgrind was, rightfully, complaining about
      CreatePolicy() ending up copying beyond the end of the parsed policy
      name.  Name is a fixed-size type and we need to use namein (through
      DirectFunctionCall1()) to flush out the entire array before we pass
      it down to heap_form_tuple.
      
      Michael Paquier pointed out that pg_dump --verbose was missing a
      newline and Fabrízio de Royes Mello further pointed out that the
      schema was also missing from the messages, so fix those also.
      
      Also, based on an off-list comment from Kevin, rework the psql \d
      output to facilitate copy/pasting into a new CREATE or ALTER POLICY
      command.
      
      Lastly, improve the pg_policies view and update the documentation for
      it, along with a few other minor doc corrections based on an off-list
      discussion with Adam Brightwell.
      78d72563
    • Tom Lane's avatar
      Fix bogus logic for zic -P option. · 59685704
      Tom Lane authored
      The quick hack I added to zic to dump out currently-in-use timezone
      abbreviations turns out to have a nasty bug: within each zone, it was
      printing the last "struct ttinfo" to be *defined*, not necessarily the
      last one in use.  This was mainly a problem in zones that had changed the
      meaning of their zone abbreviation (to another GMT offset value) and later
      changed it back.
      
      As a result of this error, we'd missed out updating the tznames/ files
      for some jurisdictions that have changed their zone abbreviations since
      the tznames/ files were originally created.  I'll address the missing data
      updates in a separate commit.
      59685704
    • Alvaro Herrera's avatar
      Don't balance vacuum cost delay when per-table settings are in effect · 1021bd6a
      Alvaro Herrera authored
      When there are cost-delay-related storage options set for a table,
      trying to make that table participate in the autovacuum cost-limit
      balancing algorithm produces undesirable results: instead of using the
      configured values, the global values are always used,
      as illustrated by Mark Kirkwood in
      http://www.postgresql.org/message-id/52FACF15.8020507@catalyst.net.nz
      
      Since the mechanism is already complicated, just disable it for those
      cases rather than trying to make it cope.  There are undesirable
      side-effects from this too, namely that the total I/O impact on the
      system will be higher whenever such tables are vacuumed.  However, this
      is seen as less harmful than slowing down vacuum, because that would
      cause bloat to accumulate.  Anyway, in the new system it is possible to
      tweak options to get the precise behavior one wants, whereas with the
      previous system one was simply hosed.
      
      This has been broken forever, so backpatch to all supported branches.
      This might affect systems where cost_limit and cost_delay have been set
      for individual tables.
      1021bd6a
    • Robert Haas's avatar
      Fix typos in comments. · 017b2e98
      Robert Haas authored
      Etsuro Fujita
      017b2e98
    • Robert Haas's avatar
      Still another typo fix for 0709b7ee. · 9019264f
      Robert Haas authored
      Buildfarm member anole caught this one.
      9019264f
    • Heikki Linnakangas's avatar
      Check for GiST index tuples that don't fit on a page. · 7690ddea
      Heikki Linnakangas authored
      The page splitting code would go into infinite recursion if you try to
      insert an index tuple that doesn't fit even on an empty page.
      
      Per analysis and suggested fix by Andrew Gierth. Fixes bug #11555, reported
      by Bryan Seitz (analysis happened over IRC). Backpatch to all supported
      versions.
      7690ddea
    • Heikki Linnakangas's avatar
      Fix documentation for CREATE SEQUENCE IF NOT EXISTS. · 7a08e21f
      Heikki Linnakangas authored
      The [ IF NOT EXISTS ] was put in wrong place in the syntax.
      
      Pointed out by Marti Raudsepp.
      7a08e21f
  2. 02 Oct, 2014 4 commits
  3. 01 Oct, 2014 8 commits
    • Tom Lane's avatar
      Fix some more problems with nested append relations. · 5a6c168c
      Tom Lane authored
      As of commit a87c7291 (which later got backpatched as far as 9.1),
      we're explicitly supporting the notion that append relations can be
      nested; this can occur when UNION ALL constructs are nested, or when
      a UNION ALL contains a table with inheritance children.
      
      Bug #11457 from Nelson Page, as well as an earlier report from Elvis
      Pranskevichus, showed that there were still nasty bugs associated with such
      cases: in particular the EquivalenceClass mechanism could try to generate
      "join" clauses connecting an appendrel child to some grandparent appendrel,
      which would result in assertion failures or bogus plans.
      
      Upon investigation I concluded that all current callers of
      find_childrel_appendrelinfo() need to be fixed to explicitly consider
      multiple levels of parent appendrels.  The most complex fix was in
      processing of "broken" EquivalenceClasses, which are ECs for which we have
      been unable to generate all the derived equality clauses we would like to
      because of missing cross-type equality operators in the underlying btree
      operator family.  That code path is more or less entirely untested by
      the regression tests to date, because no standard opfamilies have such
      holes in them.  So I wrote a new regression test script to try to exercise
      it a bit, which turned out to be quite a worthwhile activity as it exposed
      existing bugs in all supported branches.
      
      The present patch is essentially the same as far back as 9.2, which is
      where parameterized paths were introduced.  In 9.0 and 9.1, we only need
      to back-patch a small fragment of commit 5b7b5518, which fixes failure to
      propagate out the original WHERE clauses when a broken EC contains constant
      members.  (The regression test case results show that these older branches
      are noticeably stupider than 9.2+ in terms of the quality of the plans
      generated; but we don't really care about plan quality in such cases,
      only that the plan not be outright wrong.  A more invasive fix in the
      older branches would not be a good idea anyway from a plan-stability
      standpoint.)
      5a6c168c
    • Andres Freund's avatar
      Refactor replication connection code of various pg_basebackup utilities. · 0c013e08
      Andres Freund authored
      Move some more code to manage replication connection command to
      streamutil.c. A later patch will introduce replication slot via
      pg_receivexlog and this avoid duplicating relevant code between
      pg_receivexlog and pg_recvlogical.
      
      Author: Michael Paquier, with some editing by me.
      0c013e08
    • Andres Freund's avatar
      pg_recvlogical.c code review. · fdf81c9a
      Andres Freund authored
      Several comments still referred to 'initiating', 'freeing', 'stopping'
      replication slots. These were terms used during different phases of
      the development of logical decoding, but are no long accurate.
      
      Also rename StreamLog() to StreamLogicalLog() and add 'void' to the
      prototype.
      
      Author: Michael Paquier, with some editing by me.
      
      Backpatch to 9.4 where pg_recvlogical was introduced.
      fdf81c9a
    • Heikki Linnakangas's avatar
      Remove num_xloginsert_locks GUC, replace with a #define · 5fa6c81a
      Heikki Linnakangas authored
      I left the GUC in place for the beta period, so that people could experiment
      with different values. No-one's come up with any data that a different value
      would be better under some circumstances, so rather than try to document to
      users what the GUC, let's just hard-code the current value, 8.
      5fa6c81a
    • Andres Freund's avatar
      Block signals while computing the sleep time in postmaster's main loop. · a39e78b7
      Andres Freund authored
      DetermineSleepTime() was previously called without blocked
      signals. That's not good, because it allows signal handlers to
      interrupt its workings.
      
      DetermineSleepTime() was added in 9.3 with the addition of background
      workers (da07a1e8), where it only read from
      BackgroundWorkerList.
      
      Since 9.4, where dynamic background workers were added (7f7485a0),
      the list is also manipulated in DetermineSleepTime(). That's bad
      because the list now can be persistently corrupted if modified by both
      a signal handler and DetermineSleepTime().
      
      This was discovered during the investigation of hangs on buildfarm
      member anole. It's unclear whether this bug is the source of these
      hangs or not, but it's worth fixing either way. I have confirmed that
      it can cause crashes.
      
      It luckily looks like this only can cause problems when bgworkers are
      actively used.
      
      Discussion: 20140929193733.GB14400@awork2.anarazel.de
      
      Backpatch to 9.3 where background workers were introduced.
      a39e78b7
    • Heikki Linnakangas's avatar
      Add functions for dealing with PGP armor header lines to pgcrypto. · 32984d8f
      Heikki Linnakangas authored
      This add a new pgp_armor_headers function to extract armor headers from an
      ASCII-armored blob, and a new overloaded variant of the armor function, for
      constructing an ASCII-armor with extra headers.
      
      Marko Tiikkaja and me.
      32984d8f
    • Andres Freund's avatar
      Improve documentation about binary/textual output mode for output plugins. · 0ef3c29a
      Andres Freund authored
      Also improve related error message as it contributed to the confusion.
      
      Discussion: CAB7nPqQrqFzjqCjxu4GZzTrD9kpj6HMn9G5aOOMwt1WZ8NfqeA@mail.gmail.com,
          CAB7nPqQXc_+g95zWnqaa=mVQ4d3BVRs6T41frcEYi2ocUrR3+A@mail.gmail.com
      
      Per discussion between Michael Paquier, Robert Haas and Andres Freund
      
      Backpatch to 9.4 where logical decoding was introduced.
      0ef3c29a
    • Andres Freund's avatar
      Rename CACHE_LINE_SIZE to PG_CACHE_LINE_SIZE. · ef886384
      Andres Freund authored
      As noted in http://bugs.debian.org/763098 there is a conflict between
      postgres' definition of CACHE_LINE_SIZE and the definition by various
      *bsd platforms. It's debatable who has the right to define such a
      name, but postgres' use was only introduced in 375d8526 (9.4), so
      it seems like a good idea to rename it.
      
      Discussion: 20140930195756.GC27407@msg.df7cb.de
      
      Per complaint of Christoph Berg in the above email, although he's not
      the original bug reporter.
      
      Backpatch to 9.4 where the define was introduced.
      ef886384
  4. 30 Sep, 2014 3 commits
  5. 29 Sep, 2014 4 commits
    • Andres Freund's avatar
      doc fix for pg_recvlogical: --create doesn't immediately exit. · 445d2628
      Andres Freund authored
      Author: Michael Paquier
      445d2628
    • Stephen Frost's avatar
      Also revert e3ec0728, JSON regression tests · 08da8947
      Stephen Frost authored
      Managed to forget to update the other JSON regression test output,
      again.  Revert the commit which fixed it before.
      
      Per buildfarm.
      08da8947
    • Stephen Frost's avatar
      Revert 95d737ff to add 'ignore_nulls' · c8a026e4
      Stephen Frost authored
      Per discussion, revert the commit which added 'ignore_nulls' to
      row_to_json.  This capability would be better added as an independent
      function rather than being bolted on to row_to_json.  Additionally,
      the implementation didn't address complex JSON objects, and so was
      incomplete anyway.
      
      Pointed out by Tom and discussed with Andrew and Robert.
      c8a026e4
    • Tom Lane's avatar
      Change JSONB's on-disk format for improved performance. · def4c28c
      Tom Lane authored
      The original design used an array of offsets into the variable-length
      portion of a JSONB container.  However, such an array is basically
      uncompressible by simple compression techniques such as TOAST's LZ
      compressor.  That's bad enough, but because the offset array is at the
      front, it tended to trigger the give-up-after-1KB heuristic in the TOAST
      code, so that the entire JSONB object was stored uncompressed; which was
      the root cause of bug #11109 from Larry White.
      
      To fix without losing the ability to extract a random array element in O(1)
      time, change this scheme so that most of the JEntry array elements hold
      lengths rather than offsets.  With data that's compressible at all, there
      tend to be fewer distinct element lengths, so that there is scope for
      compression of the JEntry array.  Every N'th entry is still an offset.
      To determine the length or offset of any specific element, we might have
      to examine up to N preceding JEntrys, but that's still O(1) so far as the
      total container size is concerned.  Testing shows that this cost is
      negligible compared to other costs of accessing a JSONB field, and that
      the method does largely fix the incompressible-data problem.
      
      While at it, rearrange the order of elements in a JSONB object so that
      it's "all the keys, then all the values" not alternating keys and values.
      This doesn't really make much difference right at the moment, but it will
      allow providing a fast path for extracting individual object fields from
      large JSONB values stored EXTERNAL (ie, uncompressed), analogously to the
      existing optimization for substring extraction from large EXTERNAL text
      values.
      
      Bump catversion to denote the incompatibility in on-disk format.
      We will need to fix pg_upgrade to disallow upgrading jsonb data stored
      with 9.4 betas 1 and 2.
      
      Heikki Linnakangas and Tom Lane
      def4c28c
  6. 26 Sep, 2014 8 commits
    • Stephen Frost's avatar
      Fix relcache for policies, and doc updates · ff27fcfa
      Stephen Frost authored
      Andres pointed out that there was an extra ';' in equalPolicies, which
      made me realize that my prior testing with CLOBBER_CACHE_ALWAYS was
      insufficient (it didn't always catch the issue, just most of the time).
      Thanks to that, a different issue was discovered, specifically in
      equalRSDescs.  This change corrects eqaulRSDescs to return 'true' once
      all policies have been confirmed logically identical.  After stepping
      through both functions to ensure correct behavior, I ran this for
      about 12 hours of CLOBBER_CACHE_ALWAYS runs of the regression tests
      with no failures.
      
      In addition, correct a few typos in the documentation which were pointed
      out by Thom Brown (thanks!) and improve the policy documentation further
      by adding a flushed out usage example based on a unix passwd file.
      
      Lastly, clean up a few comments in the regression tests and pg_dump.h.
      ff27fcfa
    • Robert Haas's avatar
      Fix identify_locking_dependencies for schema-only dumps. · 07d46a89
      Robert Haas authored
      Without this fix, parallel restore of a schema-only dump can deadlock,
      because when the dump is schema-only, the dependency will still be
      pointing at the TABLE item rather than the TABLE DATA item.
      
      Robert Haas and Tom Lane
      07d46a89
    • Andres Freund's avatar
      Further atomic ops portability improvements and bug fixes. · f9f07411
      Andres Freund authored
      * Don't play tricks for a more efficient pg_atomic_clear_flag() in the
        generic gcc implementation. The old version was broken on gcc < 4.7
        on !x86 platforms. Per buildfarm member chipmunk.
      * Make usage of __atomic() fences depend on HAVE_GCC__ATOMIC_INT32_CAS
        instead of HAVE_GCC__ATOMIC_INT64_CAS - there's platforms with 32bit
        support that don't support 64bit atomics.
      * Blindly fix two superflous #endif in generic-xlc.h
      * Check for --disable-atomics in platforms but x86.
      f9f07411
    • Andres Freund's avatar
      Fix a couple occurrences of 'the the' in the new atomics API. · a30199b0
      Andres Freund authored
      Author: Erik Rijkers
      a30199b0
    • Peter Eisentraut's avatar
      Fix whitespace · d11339c0
      Peter Eisentraut authored
      d11339c0
    • Andres Freund's avatar
      Define META_FREE in a way that doesn't cause -Wempty-body warnings. · 9b6bb9b4
      Andres Freund authored
      That get rids of the only -Wempty-body warning when compiling postgres
      with gcc 4.8/9. As 6550b901 shows, it's useful to be able to use that
      option routinely.
      
      Without asserts there's many more warnings, but that's food for
      another commit.
      9b6bb9b4
    • Andres Freund's avatar
      Fix atomic ops inline x86 inline assembly for older 32bit gccs. · f18cad94
      Andres Freund authored
      Some x86 32bit versions of gcc apparently generate references to the
      nonexistant %sil register when using when using the r input
      constraint, but not with the =q constraint. The latter restricts
      allocations to a/b/c/d which should all work.
      f18cad94
    • Andres Freund's avatar
      Fix atomic ops for x86 gcc compilers that don't understand atomic intrinsics. · 88bcdf9d
      Andres Freund authored
      Per buildfarm animal locust.
      88bcdf9d
  7. 25 Sep, 2014 5 commits
    • Andres Freund's avatar
      Add a basic atomic ops API abstracting away platform/architecture details. · b64d92f1
      Andres Freund authored
      Several upcoming performance/scalability improvements require atomic
      operations. This new API avoids the need to splatter compiler and
      architecture dependent code over all the locations employing atomic
      ops.
      
      For several of the potential usages it'd be problematic to maintain
      both, a atomics using implementation and one using spinlocks or
      similar. In all likelihood one of the implementations would not get
      tested regularly under concurrency. To avoid that scenario the new API
      provides a automatic fallback of atomic operations to spinlocks. All
      properties of atomic operations are maintained. This fallback -
      obviously - isn't as fast as just using atomic ops, but it's not bad
      either. For one of the future users the atomics ontop spinlocks
      implementation was actually slightly faster than the old purely
      spinlock using implementation. That's important because it reduces the
      fear of regressing older platforms when improving the scalability for
      new ones.
      
      The API, loosely modeled after the C11 atomics support, currently
      provides 'atomic flags' and 32 bit unsigned integers. If the platform
      efficiently supports atomic 64 bit unsigned integers those are also
      provided.
      
      To implement atomics support for a platform/architecture/compiler for
      a type of atomics 32bit compare and exchange needs to be
      implemented. If available and more efficient native support for flags,
      32 bit atomic addition, and corresponding 64 bit operations may also
      be provided. Additional useful atomic operations are implemented
      generically ontop of these.
      
      The implementation for various versions of gcc, msvc and sun studio have
      been tested. Additional existing stub implementations for
      * Intel icc
      * HUPX acc
      * IBM xlc
      are included but have never been tested. These will likely require
      fixes based on buildfarm and user feedback.
      
      As atomic operations also require barriers for some operations the
      existing barrier support has been moved into the atomics code.
      
      Author: Andres Freund with contributions from Oskari Saarenmaa
      Reviewed-By: Amit Kapila, Robert Haas, Heikki Linnakangas and Álvaro Herrera
      Discussion: CA+TgmoYBW+ux5-8Ja=Mcyuy8=VXAnVRHp3Kess6Pn3DMXAPAEA@mail.gmail.com,
          20131015123303.GH5300@awork2.anarazel.de,
          20131028205522.GI20248@awork2.anarazel.de
      b64d92f1
    • Andrew Dunstan's avatar
      Remove ill-conceived ban on zero length json object keys. · 9111d463
      Andrew Dunstan authored
      We removed a similar ban on this in json_object recently, but the ban in
      datum_to_json was left, which generate4d sprutious errors in othee json
      generators, notable json_build_object.
      
      Along the way, add an assertion that datum_to_json is not passed a null
      key. All current callers comply with this rule, but the assertion will
      catch any possible future misbehaviour.
      9111d463
    • Robert Haas's avatar
      Change locking regimen around buffer replacement. · 5d7962c6
      Robert Haas authored
      Previously, we used an lwlock that was held from the time we began
      seeking a candidate buffer until the time when we found and pinned
      one, which is disastrous for concurrency.  Instead, use a spinlock
      which is held just long enough to pop the freelist or advance the
      clock sweep hand, and then released.  If we need to advance the clock
      sweep further, we reacquire the spinlock once per buffer.
      
      This represents a significant increase in atomic operations around
      buffer eviction, but it still wins on many workloads.  On others, it
      may result in no gain, or even cause a regression, unless the number
      of buffer mapping locks is also increased.  However, that seems like
      material for a separate commit.  We may also need to consider other
      methods of mitigating contention on this spinlock, such as splitting
      it into multiple locks or jumping the clock sweep hand more than one
      buffer at a time, but those, too, seem like separate improvements.
      
      Patch by me, inspired by a much larger patch from Amit Kapila.
      Reviewed by Andres Freund.
      5d7962c6
    • Heikki Linnakangas's avatar
      Refactor space allocation for base64 encoding/decoding in pgcrypto. · 1dcfb8da
      Heikki Linnakangas authored
      Instead of trying to accurately calculate the space needed, use a StringInfo
      that's enlarged as needed. This is just moving things around currently - the
      old code was not wrong - but this is in preparation for a patch that adds
      support for extra armor headers, and would make the space calculation more
      complicated.
      
      Marko Tiikkaja
      1dcfb8da
    • Andres Freund's avatar
      Fix VPATH builds of the replication parser from git for some !gcc compilers. · 56a312aa
      Andres Freund authored
      Some compilers don't automatically search the current directory for
      included files. 9cc2c182 fixed that for builds from tarballs by
      adding an include to the source directory. But that doesn't work when
      the scanner is generated in the VPATH directory. Use the same search
      path as the other parsers in the tree.
      
      One compiler that definitely was affected is solaris' sun cc.
      
      Backpatch to 9.1 which introduced using an actual parser for
      replication commands.
      56a312aa