1. 30 Mar, 2015 6 commits
    • Alvaro Herrera's avatar
      Fix lost persistence setting during REINDEX INDEX · 08536301
      Alvaro Herrera authored
      ReindexIndex() trusts a parser-built RangeVar with the persistence to
      use for the new copy of the index; but the parser naturally does not
      know what's the persistence of the original index.  To find out the
      correct persistence, grab it from relcache.
      
      This bug was introduced by commit 85b506bb, and therefore no
      backpatch is necessary.
      
      Bug reported by Thom Brown, analysis and patch by Michael Paquier; test
      case provided by Fabrízio de Royes Mello.
      08536301
    • Tom Lane's avatar
      Be more careful about printing constants in ruleutils.c. · 542320c2
      Tom Lane authored
      The previous coding in get_const_expr() tried to avoid quoting integer,
      float, and numeric literals if at all possible.  While that looks nice,
      it means that dumped expressions might re-parse to something that's
      semantically equivalent but not the exact same parsetree; for example
      a FLOAT8 constant would re-parse as a NUMERIC constant with a cast to
      FLOAT8.  Though the result would be the same after constant-folding,
      this is problematic in certain contexts.  In particular, Jeff Davis
      pointed out that this could cause unexpected failures in ALTER INHERIT
      operations because of child tables having not-exactly-equivalent CHECK
      expressions.  Therefore, favor correctness over legibility and dump
      such constants in quotes except in the limited cases where they'll
      be interpreted as the same type even without any casting.
      
      This results in assorted small changes in the regression test outputs,
      and will affect display of user-defined views and rules similarly.
      The odds of that causing problems in the field seem non-negligible;
      given the lack of previous complaints, it seems best not to change
      this in the back branches.
      542320c2
    • Tom Lane's avatar
      Fix rare core dump in BackendIdGetTransactionIds(). · 701dcc98
      Tom Lane authored
      BackendIdGetTransactionIds() neglected the possibility that the PROC
      pointer in a ProcState array entry is null.  In current usage, this could
      only crash if the other backend had exited since pgstat_read_current_status
      saw it as active, which is a pretty narrow window.  But it's reachable in
      the field, per bug #12918 from Vladimir Borodin.
      
      Back-patch to 9.4 where the faulty code was introduced.
      701dcc98
    • Heikki Linnakangas's avatar
      Add index-only scan support to range type GiST opclass. · 0633a60f
      Heikki Linnakangas authored
      Andreas Karlsson
      0633a60f
    • Tom Lane's avatar
      Clean up all the cruft after a pg_rewind test run. · 1c41e2a9
      Tom Lane authored
      regress_log temp directory was properly .gitignore'd, which may explain
      why it got left out of the "make clean" action.
      1c41e2a9
    • Tom Lane's avatar
      Fix multiple bugs and infelicities in pg_rewind. · c67f366f
      Tom Lane authored
      Bugs all spotted by Coverity, including wrong realloc() size request
      and memory leaks.  Cosmetic improvements by me.
      
      The usage of the global variable "filemap" here is still pretty awful,
      but at least I got rid of the gratuitous aliasing in several routines
      (which was helping to annoy Coverity, as well as being a bug risk).
      c67f366f
  2. 29 Mar, 2015 4 commits
    • Tom Lane's avatar
      Add vacuum_delay_point call in compute_index_stats's per-sample-row loop. · e4cbfd67
      Tom Lane authored
      Slow functions in index expressions might cause this loop to take long
      enough to make it worth being cancellable.  Probably it would be enough
      to call CHECK_FOR_INTERRUPTS here, but for consistency with other
      per-sample-row loops in this file, let's use vacuum_delay_point.
      
      Report and patch by Jeff Janes.  Back-patch to all supported branches.
      e4cbfd67
    • Tom Lane's avatar
      Make ginbuild's funcCtx be independent of its tmpCtx. · 1601830e
      Tom Lane authored
      Previously the funcCtx was a child of the tmpCtx, but that was broken
      by commit eaa5808e, which made
      MemoryContextReset() delete, not reset, child contexts.  The behavior of
      having a tmpCtx reset also clear the other context seems rather dubious
      anyway, so let's just disentangle them.  Per report from Erik Rijkers.
      
      In passing, fix badly-inaccurate comments about these contexts.
      1601830e
    • Tom Lane's avatar
      Remove a couple other vestigial yylex() declarations. · 9a8e2331
      Tom Lane authored
      These were workarounds for a long-gone flex bug; all supported versions
      of flex emit an extern declaration as expected.
      9a8e2331
    • Tom Lane's avatar
      Minor code cleanups in pgbench expression support. · e9dd03c0
      Tom Lane authored
      Get rid of unnecessary expr_yylex declaration (we haven't supported
      flex 2.5.4 in a long time, and even if we still did, the declaration in
      pgbench.h makes this one unnecessary and inappropriate).  Fix copyright
      dates, improve some layout choices, etc.
      e9dd03c0
  3. 28 Mar, 2015 4 commits
    • Tom Lane's avatar
      Better fix for misuse of Float8GetDatumFast(). · 2c33e0fb
      Tom Lane authored
      We can use that macro as long as we put the value into a local variable.
      Commit 735cd612 was not wrong on its own terms, but I think this way
      looks nicer, and it should save a few cycles on 32-bit machines.
      2c33e0fb
    • Andrew Dunstan's avatar
      Add a pager_min_lines setting to psql · 7655f4cc
      Andrew Dunstan authored
      If set, the pager will not be used unless this many lines are to be
      displayed, even if that is more than the screen depth. Default is zero,
      meaning it's disabled.
      
      There is probably more work to be done in giving the user control over
      when the pager is used, particularly when wide output forces use of the
      pager regardless of how many lines there are, but this is a start.
      7655f4cc
    • Andrew Dunstan's avatar
      Use standard librart sqrt function in pg_stat_statements · cfe12763
      Andrew Dunstan authored
      The stddev calculation included a faster but unportable sqrt function.
      This is not worth the extra effort, and won't work everywhere. If the
      standard library function is good enough for the SQL function it
      should be good enough here too.
      cfe12763
    • Heikki Linnakangas's avatar
      Add index-only scan support to inet GiST opclass. · 3a20b0e7
      Heikki Linnakangas authored
      Andreas Karlsson
      3a20b0e7
  4. 27 Mar, 2015 4 commits
  5. 26 Mar, 2015 7 commits
    • Heikki Linnakangas's avatar
      Minor refactoring of btree_gist code. · 8816af65
      Heikki Linnakangas authored
      The gbt_var_key_copy function was doing two different things depending on
      the boolean argument. Seems cleaner to have two separate functions.
      
      Remove unused argument from gbt_num_compress.
      8816af65
    • Heikki Linnakangas's avatar
      Fix GiST index-only scans for opclasses with different storage type. · 55b59eda
      Heikki Linnakangas authored
      We cannot use the index's tuple descriptor directly to describe the index
      tuples returned in an index-only scan. That's because the index might use
      a different datatype for the values stored on disk than the type originally
      indexed. As long as they were both pass-by-ref, it worked, but will not work
      for pass-by-value types of different sizes. I noticed this as a crash when I
      started hacking a patch to add fetch methods to btree_gist.
      55b59eda
    • Tom Lane's avatar
      Tweak __attribute__-wrapping macros for better pgindent results. · 785941cd
      Tom Lane authored
      This improves on commit bbfd7eda by
      making two simple changes:
      
      * pg_attribute_noreturn now takes parentheses, ie pg_attribute_noreturn().
      Likewise pg_attribute_unused(), pg_attribute_packed().  This reduces
      pgindent's tendency to misformat declarations involving them.
      
      * attributes are now always attached to function declarations, not
      definitions.  Previously some places were taking creative shortcuts,
      which were not merely candidates for bad misformatting by pgindent
      but often were outright wrong anyway.  (It does little good to put a
      noreturn annotation where callers can't see it.)  In any case, if
      we would like to believe that these macros can be used with non-gcc
      compilers, we should avoid gratuitous variance in usage patterns.
      
      I also went through and manually improved the formatting of a lot of
      declarations, and got rid of excessively repetitive (and now obsolete
      anyway) comments informing the reader what pg_attribute_printf is for.
      785941cd
    • Heikki Linnakangas's avatar
      Add support for index-only scans in GiST. · d04c8ed9
      Heikki Linnakangas authored
      This adds a new GiST opclass method, 'fetch', which is used to reconstruct
      the original Datum from the value stored in the index. Also, the 'canreturn'
      index AM interface function gains a new 'attno' argument. That makes it
      possible to use index-only scans on a multi-column index where some of the
      opclasses support index-only scans but some do not.
      
      This patch adds support in the box and point opclasses. Other opclasses
      can added later as follow-on patches (btree_gist would be particularly
      interesting).
      
      Anastasia Lubennikova, with additional fixes and modifications by me.
      d04c8ed9
    • Heikki Linnakangas's avatar
      Minor cleanup of GiST code, for readability. · 8fa393a6
      Heikki Linnakangas authored
      Remove the gistcentryinit function, inlining the relevant part of it into
      the only caller.
      8fa393a6
    • Tom Lane's avatar
      Suppress some unused-variable complaints in new LOCK_DEBUG code. · bed756a8
      Tom Lane authored
      Jeff Janes
      bed756a8
    • Tatsuo Ishii's avatar
      Make SyncRepWakeQueue to a static function · 656ea810
      Tatsuo Ishii authored
      It is only used in src/backend/replication/syncrep.c.
      
      Back-patch to all supported branches except 9.1 which declares the
      function as static.
      656ea810
  6. 25 Mar, 2015 13 commits
    • Tom Lane's avatar
      Add an ASSERT statement in plpgsql. · a4847fc3
      Tom Lane authored
      This is meant to make it easier to insert simple debugging cross-checks
      in plpgsql functions.
      
      Pavel Stehule, reviewed by Jim Nasby
      a4847fc3
    • Andres Freund's avatar
      Centralize definition of integer limits. · 83ff1618
      Andres Freund authored
      Several submitted and even committed patches have run into the problem
      that C89, our baseline, does not provide minimum/maximum values for
      various integer datatypes. C99's stdint.h does, but we can't rely on
      it.
      
      Several parts of the code defined limits locally, so instead centralize
      the definitions to c.h.
      
      This patch also changes the more obvious usages of literal limit values;
      there's more places that could be changed, but it's less clear whether
      it's beneficial to change those.
      
      Author: Andrew Gierth
      Discussion: 87619tc5wc.fsf@news-spur.riddles.org.uk
      83ff1618
    • Alvaro Herrera's avatar
      Return ObjectAddress in many ALTER TABLE sub-routines · bdc3d7fa
      Alvaro Herrera authored
      Since commit a2e35b53, most CREATE and ALTER commands return the
      ObjectAddress of the affected object.  This is useful for event triggers
      to try to figure out exactly what happened.  This patch extends this
      idea a bit further to cover ALTER TABLE as well: an auxiliary
      ObjectAddress is returned for each of several subcommands of ALTER
      TABLE.  This makes it possible to decode with precision what happened
      during execution of any ALTER TABLE command; for instance, which
      constraint was added by ALTER TABLE ADD CONSTRAINT, or which parent got
      dropped from the parents list by ALTER TABLE NO INHERIT.
      
      As with the previous patch, there is no immediate user-visible change
      here.
      
      This is all really just continuing what c504513f started.
      
      Reviewed by Stephen Frost.
      bdc3d7fa
    • Tom Lane's avatar
      Upgrade src/port/rint.c to be POSIX-compliant. · 06bf0dd6
      Tom Lane authored
      The POSIX spec says that rint() rounds halfway cases to nearest even.
      Our substitute implementation failed to do that, rather rounding halfway
      cases away from zero; and it also got some other cases (such as minus
      zero) wrong.  This led to observable cross-platform differences, as
      reported in bug #12885 from Rich Schaaf; in particular, casting from
      float to int didn't honor round-to-nearest-even on builds using rint.c.
      
      Implement something that attempts to cover all cases per spec, and add
      some simple regression tests so that we'll notice if any platforms still
      get this wrong.
      
      Although this is a bug fix, no back-patch, as a behavioral change in
      the back branches was agreed not to be a good idea.
      
      Pedro Gimeno Fortea, reviewed by Michael Paquier and myself
      06bf0dd6
    • Kevin Grittner's avatar
      Reduce pinning and buffer content locking for btree scans. · 2ed5b87f
      Kevin Grittner authored
      Even though the main benefit of the Lehman and Yao algorithm for
      btrees is that no locks need be held between page reads in an
      index search, we were holding a buffer pin on each leaf page after
      it was read until we were ready to read the next one.  The reason
      was so that we could treat this as a weak lock to create an
      "interlock" with vacuum's deletion of heap line pointers, even
      though our README file pointed out that this was not necessary for
      a scan using an MVCC snapshot.
      
      The main goal of this patch is to reduce the blocking of vacuum
      processes by in-progress btree index scans (including a cursor
      which is idle), but the code rearrangement also allows for one
      less buffer content lock to be taken when a forward scan steps from
      one page to the next, which results in a small but consistent
      performance improvement in many workloads.
      
      This patch leaves behavior unchanged for some cases, which can be
      addressed separately so that each case can be evaluated on its own
      merits.  These unchanged cases are when a scan uses a non-MVCC
      snapshot, an index-only scan, and a scan of a btree index for which
      modifications are not WAL-logged.  If later patches allow  all of
      these cases to drop the buffer pin after reading a leaf page, then
      the btree vacuum process can be simplified; it will no longer need
      the "super-exclusive" lock to delete tuples from a page.
      
      Reviewed by Heikki Linnakangas and Kyotaro Horiguchi
      2ed5b87f
    • Alvaro Herrera's avatar
      Add OID output argument to DefineTSConfiguration · 8217fb14
      Alvaro Herrera authored
      ... which is set to the OID of a copied text search config, whenever the
      COPY clause is used.
      
      This is in the spirit of commit a2e35b53.
      8217fb14
    • Alvaro Herrera's avatar
      Fix bug for array-formatted identities of user mappings · b3196e65
      Alvaro Herrera authored
      I failed to realize that server names reported in the object args array
      would get quoted, which is wrong; remove that, making sure that it's
      only quoted in the string-formatted identity.
      
      This bug was introduced by my commit cf34e373, which was backpatched,
      but since object name/args arrays are new in commit a6762014, there
      is no need to backpatch this any further.
      b3196e65
    • Alvaro Herrera's avatar
      Fix gram.y comment to match reality · dc8e0529
      Alvaro Herrera authored
      There are other comments in there that don't precisely match what's
      implemented, but this one confused me enough to be worth fixing.
      dc8e0529
    • Bruce Momjian's avatar
      Revert commit 843cd0bf · 11226e38
      Bruce Momjian authored
      Report by Tom Lane
      11226e38
    • Bruce Momjian's avatar
      PL/pgSQL docs: recommend format() for query construction · 0e1f6d81
      Bruce Momjian authored
      Previously only concatenation was recommended.
      
      Report by Pavel Stehule
      0e1f6d81
    • Bruce Momjian's avatar
      psql: show proper row count in \x mode for zero-column output · 376a0c45
      Bruce Momjian authored
      Also, fix pager enable selection for such cases, and other cleanups for
      zero-column output.
      
      Report by Thom Brown
      376a0c45
    • Bruce Momjian's avatar
      docs: clarify when MVCC snapshot is taken · 66c8040d
      Bruce Momjian authored
      Report by Álvaro Hernández Tortosa
      66c8040d
    • Bruce Momjian's avatar
      btree_gin: properly call DirectFunctionCall1() · 843cd0bf
      Bruce Momjian authored
      Previously we called DirectFunctionCall3() with dummy arguments.
      
      Patch by Jon Nelson
      843cd0bf
  7. 24 Mar, 2015 2 commits