1. 28 Apr, 2014 4 commits
    • Greg Stark's avatar
      Add support for wrapping to psql's "extended" mode. This makes it very · 6513633b
      Greg Stark authored
      feasible to display tables that have both many columns and some large
      data in some columns (such as pg_stats).
      
      Emre Hasegeli with review and rewriting from Sergey Muraviov and
      reviewed by Greg Stark
      6513633b
    • Heikki Linnakangas's avatar
      Fix two bugs in WAL-logging of GIN pending-list pages. · d2722443
      Heikki Linnakangas authored
      In writeListPage, never take a full-page image of the page, because we
      have all the information required to re-initialize in the WAL record
      anyway. Before this fix, a full-page image was always generated, unless
      full_page_writes=off, because when the page is initialized its LSN is
      always 0. In stable-branches, keep the code to restore the backup blocks
      if they exist, in case that the WAL is generated with an older minor
      version, but in master Assert that there are no full-page images.
      
      In the redo routine, add missing "off++". Otherwise the tuples are added
      to the page in reverse order. That happens to be harmless because we
      always scan and remove all the tuples together, but it was clearly wrong.
      Also, it was masked by the first bug unless full_page_writes=off, because
      the page was always restored from a full-page image.
      
      Backpatch to all supported versions.
      d2722443
    • Robert Haas's avatar
      Minor fixes for ALTER TABLE documentation. · 728c06f1
      Robert Haas authored
      Etsuro Fujita
      728c06f1
    • Tom Lane's avatar
      Can't completely get rid of #ifndef FRONTEND in palloc.h :-( · a9baeb36
      Tom Lane authored
      pg_controldata includes postgres.h not postgres_fe.h, so utils/palloc.h
      must be able to compile in a "#define FRONTEND" context.  It appears that
      Solaris Studio is smart enough to persuade us to define PG_USE_INLINE,
      but not smart enough to not make a copy of unreferenced static functions;
      which leads to an unsatisfied reference to CurrentMemoryContext.  So we
      need an #ifndef FRONTEND around that declaration.  Per buildfarm.
      a9baeb36
  2. 26 Apr, 2014 3 commits
    • Tom Lane's avatar
      Improve generation algorithm for database system identifier. · 5035701e
      Tom Lane authored
      As noted some time ago, the original coding had a typo ("|" for "^")
      that made the result less unique than intended.  Even the intended
      behavior is obsolete since it was based on wanting to produce a
      usable value even if we didn't have int64 arithmetic --- a limitation
      we stopped supporting years ago.  Instead, let's redefine the system
      identifier as tv_sec in the upper 32 bits (same as before), tv_usec
      in the next 20 bits, and the low 12 bits of getpid() in the remaining
      bits.  This is still hardly guaranteed-universally-unique, but it's
      noticeably better than before.  Per my proposal at
      <29019.1374535940@sss.pgh.pa.us>
      5035701e
    • Tom Lane's avatar
      Don't #include utils/palloc.h in common/fe_memutils.h. · 528c454b
      Tom Lane authored
      This breaks the principle that common/ ought not depend on anything in the
      server, not only code-wise but in the headers.  The only arguable advantage
      is avoidance of duplication of half a dozen extern declarations, and even
      that is rather dubious, considering that the previous coding was wrong
      about which declarations to duplicate: it exposed pnstrdup() to frontend
      code even though no such function is provided in fe_memutils.c.
      
      On the same principle, don't #include utils/memutils.h in the frontend
      build of psprintf.c.  This requires duplicating the definition of
      MaxAllocSize, but that seems fine to me: there's no a-priori reason why
      frontend code should use the same size limit as the backend anyway.
      
      In passing, clean up some rather odd layout and ordering choices that
      were imposed on palloc.h to reduce the number of #ifdefs required by
      the previous approach.
      
      Per gripe from Christoph Berg.  There's still more work to do to make
      include/common/ clean, but this part seems reasonably noncontroversial.
      528c454b
    • Tom Lane's avatar
      Record the proper typmod for an index expression column. · 39b0c768
      Tom Lane authored
      We should use exprTypmod() to extract the typmod of the expression,
      instead of just blindly storing -1.  This seems to have been an aboriginal
      oversight in commit fc8d970c which
      introduced general-expression indexes.  The consequences are only cosmetic
      at present, since the index machinery doesn't really look at typmod for
      index columns; but still it seems best to describe the column type as
      precisely as we can.  Per off-list complaint from Thomas Fanghaenel.
      39b0c768
  3. 25 Apr, 2014 2 commits
  4. 24 Apr, 2014 4 commits
    • Alvaro Herrera's avatar
      Fix race when updating a tuple concurrently locked by another process · 1a917ae8
      Alvaro Herrera authored
      If a tuple is locked, and this lock is later upgraded either to an
      update or to a stronger lock, and in the meantime some other process
      tries to lock, update or delete the same tuple, it (the tuple) could end
      up being updated twice, or having conflicting locks held.
      
      The reason for this is that the second updater checks for a change in
      Xmax value, or in the HEAP_XMAX_IS_MULTI infomask bit, after noticing
      the first lock; and if there's a change, it restarts and re-evaluates
      its ability to update the tuple.  But it neglected to check for changes
      in lock strength or in lock-vs-update status when those two properties
      stayed the same.  This would lead it to take the wrong decision and
      continue with its own update, when in reality it shouldn't do so but
      instead restart from the top.
      
      This could lead to either an assertion failure much later (when a
      multixact containing multiple updates is detected), or duplicate copies
      of tuples.
      
      To fix, make sure to compare the other relevant infomask bits alongside
      the Xmax value and HEAP_XMAX_IS_MULTI bit, and restart from the top if
      necessary.
      
      Also, in the belt-and-suspenders spirit, add a check to
      MultiXactCreateFromMembers that a multixact being created does not have
      two or more members that are claimed to be updates.  This should protect
      against other bugs that might cause similar bogus situations.
      
      Backpatch to 9.3, where the possibility of multixacts containing updates
      was introduced.  (In prior versions it was possible to have the tuple
      lock upgraded from shared to exclusive, and an update would not restart
      from the top; yet we're protected against a bug there because there's
      always a sleep to wait for the locking transaction to complete before
      continuing to do anything.  Really, the fact that tuple locks always
      conflicted with concurrent updates is what protected against bugs here.)
      
      Per report from Andrew Dunstan and Josh Berkus in thread at
      http://www.postgresql.org/message-id/534C8B33.9050807@pgexperts.com
      
      Bug analysis by Andres Freund.
      1a917ae8
    • Tom Lane's avatar
      Reset pg_stat_activity.xact_start during PREPARE TRANSACTION. · d19bd29f
      Tom Lane authored
      Once we've completed a PREPARE, our session is not running a transaction,
      so its entry in pg_stat_activity should show xact_start as null, rather
      than leaving the value as the start time of the now-prepared transaction.
      
      I think possibly this oversight was triggered by faulty extrapolation
      from the adjacent comment that says PrepareTransaction should not call
      AtEOXact_PgStat, so tweak the wording of that comment.
      
      Noted by Andres Freund while considering bug #10123 from Maxim Boguk,
      although this error doesn't seem to explain that report.
      
      Back-patch to all active branches.
      d19bd29f
    • Magnus Hagander's avatar
      Properly build pg_recvlogical in the msvc build system · b2c9b161
      Magnus Hagander authored
      Michael Paquier
      b2c9b161
    • Tom Lane's avatar
      Fix incorrect pg_proc.proallargtypes entries for two built-in functions. · a0f93581
      Tom Lane authored
      pg_sequence_parameters() and pg_identify_object() have had incorrect
      proallargtypes entries since 9.1 and 9.3 respectively.  This was mostly
      masked by the correct information in proargtypes, but a few operations
      such as pg_get_function_arguments() (and thus psql's \df display) would
      show the wrong data types for these functions' input parameters.
      
      In HEAD, fix the wrong info, bump catversion, and add an opr_sanity
      regression test to catch future mistakes of this sort.
      
      In the back branches, just fix the wrong info so that installations
      initdb'd with future minor releases will have the right data.  We
      can't force an initdb, and it doesn't seem like a good idea to add
      a regression test that will fail on existing installations.
      
      Andres Freund
      a0f93581
  5. 23 Apr, 2014 11 commits
    • Tom Lane's avatar
      Allow polymorphic aggregates to have non-polymorphic state data types. · f0fedfe8
      Tom Lane authored
      Before 9.4, such an aggregate couldn't be declared, because its final
      function would have to have polymorphic result type but no polymorphic
      argument, which CREATE FUNCTION would quite properly reject.  The
      ordered-set-aggregate patch found a workaround: allow the final function
      to be declared as accepting additional dummy arguments that have types
      matching the aggregate's regular input arguments.  However, we failed
      to notice that this problem applies just as much to regular aggregates,
      despite the fact that we had a built-in regular aggregate array_agg()
      that was known to be undeclarable in SQL because its final function
      had an illegal signature.  So what we should have done, and what this
      patch does, is to decouple the extra-dummy-arguments behavior from
      ordered-set aggregates and make it generally available for all aggregate
      declarations.  We have to put this into 9.4 rather than waiting till
      later because it slightly alters the rules for declaring ordered-set
      aggregates.
      
      The patch turned out a bit bigger than I'd hoped because it proved
      necessary to record the extra-arguments option in a new pg_aggregate
      column.  I'd thought we could just look at the final function's pronargs
      at runtime, but that didn't work well for variadic final functions.
      It's probably just as well though, because it simplifies life for pg_dump
      to record the option explicitly.
      
      While at it, fix array_agg() to have a valid final-function signature,
      and add an opr_sanity test to notice future deviations from polymorphic
      consistency.  I also marked the percentile_cont() aggregates as not
      needing extra arguments, since they don't.
      f0fedfe8
    • Peter Eisentraut's avatar
      doc: Fix DocBook table column count declaration · 125ba294
      Peter Eisentraut authored
      This was broken in 26cd1d7d.
      125ba294
    • Peter Eisentraut's avatar
      ecpg: Add additional files to .gitignore · c18cc003
      Peter Eisentraut authored
      These are test files added by f9179685.
      c18cc003
    • Heikki Linnakangas's avatar
      Update obsolete comments. · a4ad9afe
      Heikki Linnakangas authored
      We no longer have a TLI field in the page header.
      a4ad9afe
    • Heikki Linnakangas's avatar
      Fix typo, trance -> tranche, in docs. · 4a781f1e
      Heikki Linnakangas authored
      Amit Langote
      4a781f1e
    • Heikki Linnakangas's avatar
      Fix typos in comment. · 8fbfbf14
      Heikki Linnakangas authored
      8fbfbf14
    • Heikki Linnakangas's avatar
      Cleanup of new b-tree page deletion code. · 4fafc4ec
      Heikki Linnakangas authored
      When marking a branch as half-dead, a pointer to the top of the branch is
      stored in the leaf block's hi-key. During normal operation, the high key
      was left in place, and the block number was just stored in the ctid field
      of the high key tuple, but in WAL replay, the high key was recreated as a
      truncated tuple with zero columns. For the sake of easier debugging, also
      truncate the tuple in normal operation, so that the page is identical
      after WAL replay. Also, rename the 'downlink' field in the WAL record to
      'topparent', as that seems like a more descriptive name. And make sure
      it's set to invalid when unlinking the leaf page.
      4fafc4ec
    • Tom Lane's avatar
      Fix documentation of FmgrInfo.fn_nargs. · d26b042c
      Tom Lane authored
      Some ancient comments claimed that fn_nargs could be -1 to indicate a
      variable number of input arguments; but this was never implemented, and
      is at variance with what we ultimately did with "variadic" functions.
      Update the comments.
      d26b042c
    • Tom Lane's avatar
      Fix broken logic in logical_heap_rewrite_flush_mappings(). · c6a4ace5
      Tom Lane authored
      It's blatantly obvious that commit 4d0d607a
      wasn't tested.  The leak's real enough, though.
      c6a4ace5
    • Bruce Momjian's avatar
      revert 4d0d607a · cee850c4
      Bruce Momjian authored
      Revert due to contrib/test_decoding regression failure
      cee850c4
    • Bruce Momjian's avatar
      doc: adjust 99704436 for "null string" · 2362c2bd
      Bruce Momjian authored
      Report by Andrew Dunstan
      2362c2bd
  6. 22 Apr, 2014 16 commits