1. 26 Mar, 2015 3 commits
  2. 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
  3. 24 Mar, 2015 3 commits
    • Bruce Momjian's avatar
      doc: update NUMERIC to state that only some ops are exact · 278edd9e
      Bruce Momjian authored
      Report by Tom Lane
      278edd9e
    • Bruce Momjian's avatar
      Add support for ALTER TABLE IF EXISTS ... RENAME CONSTRAINT · 1d8198bb
      Bruce Momjian authored
      Also add regression test.  Previously this was documented to work, but
      didn't.
      1d8198bb
    • Tom Lane's avatar
      Fix ExecOpenScanRelation to take a lock on a ROW_MARK_COPY relation. · feeb526c
      Tom Lane authored
      ExecOpenScanRelation assumed that any relation listed in the ExecRowMark
      list has been locked by InitPlan; but this is not true if the rel's
      markType is ROW_MARK_COPY, which is possible if it's a foreign table.
      
      In most (possibly all) cases, failure to acquire a lock here isn't really
      problematic because the parser, planner, or plancache would have taken the
      appropriate lock already.  In principle though it might leave us vulnerable
      to working with a relation that we hold no lock on, and in any case if the
      executor isn't depending on previously-taken locks otherwise then it should
      not do so for ROW_MARK_COPY relations.
      
      Noted by Etsuro Fujita.  Back-patch to all active versions, since the
      inconsistency has been there a long time.  (It's almost certainly
      irrelevant in 9.0, since that predates foreign tables, but the code's
      still wrong on its own terms.)
      feeb526c
  4. 23 Mar, 2015 8 commits
    • Tom Lane's avatar
      Apply table and domain CHECK constraints in name order. · e5f455f5
      Tom Lane authored
      Previously, CHECK constraints of the same scope were checked in whatever
      order they happened to be read from pg_constraint.  (Usually, but not
      reliably, this would be creation order for domain constraints and reverse
      creation order for table constraints, because of differing implementation
      details.)  Nondeterministic results of this sort are problematic at least
      for testing purposes, and in discussion it was agreed to be a violation of
      the principle of least astonishment.  Therefore, borrow the principle
      already established for triggers, and apply such checks in name order
      (using strcmp() sort rules).  This lets users control the check order
      if they have a mind to.
      
      Domain CHECK constraints still follow the rule of checking lower nested
      domains' constraints first; the name sort only applies to multiple
      constraints attached to the same domain.
      
      In passing, I failed to resist the temptation to wordsmith a bit in
      create_domain.sgml.
      
      Apply to HEAD only, since this could result in a behavioral change in
      existing applications, and the potential regression test failures have
      not actually been observed in our buildfarm.
      e5f455f5
    • Alvaro Herrera's avatar
      vacuumdb: Check result status of PQsendQuery · 871293fb
      Alvaro Herrera authored
      Noticed by Coverity
      871293fb
    • Heikki Linnakangas's avatar
      Try to fix MSVC build of pg_rewind. · 4babae1a
      Heikki Linnakangas authored
      It worked in my Windows VM with VS2013, but buildfarm animal mastodon,
      running MSVC 2005, was not happy. Amit Kapila also reported a similar error
      earlier in his environment. Let's see if this helps.
      4babae1a
    • Heikki Linnakangas's avatar
      Add pg_rewind, for re-synchronizing a master server after failback. · 61081e75
      Heikki Linnakangas authored
      Earlier versions of this tool were available (and still are) on github.
      
      Thanks to Michael Paquier, Alvaro Herrera, Peter Eisentraut, Amit Kapila,
      and Satoshi Nagayasu for review.
      61081e75
    • Andres Freund's avatar
      Don't delay replication for less than recovery_min_apply_delay's resolution. · 87cec51d
      Andres Freund authored
      Recovery delays are implemented by waiting on a latch, and latches take
      milliseconds as a parameter. The required amount of waiting was computed
      using microsecond resolution though and the wait loop's abort condition
      was checking the delay in microseconds as well.  This could lead to
      short spurts of busy looping when the overall wait time was below a
      millisecond, but above 0 microseconds.
      
      Instead just formulate the wait loop's abort condition in millisecond
      granularity as well. Given that that's recovery_min_apply_delay
      resolution, it seems harmless to not wait for less than a millisecond.
      
      Backpatch to 9.4 where recovery_min_apply_delay was introduced.
      
      Discussion: 20150323141819.GH26995@alap3.anarazel.de
      87cec51d
    • Andres Freund's avatar
      Fix copy & paste error in 4f1b890b. · a1105c3d
      Andres Freund authored
      Due to the bug delayed standbys would not delay when applying prepared
      transactions.
      
      Discussion: CAB7nPqT6BO1cCn+sAyDByBxA4EKZNAiPi2mFJ=ANeZmnmewRyg@mail.gmail.com
      
      Michael Paquier via Coverity.
      a1105c3d
    • Robert Haas's avatar
      Remove ill-advised pre-check for DSM segment exhaustion. · 372b9709
      Robert Haas authored
      dsm_control->nitems never decreases, so this is testing whether the
      server has *ever* run out of DSM segments, not whether it is
      *currently* out of DSM segments.
      
      Reported off-list by Amit Kapila.
      372b9709
    • Bruce Momjian's avatar
      to_char: revert cc0d90b7 · 33a2c5ec
      Bruce Momjian authored
      Revert "to_char(float4/8):  zero pad to specified length".  There are
      too many platform-specific problems, and the proper rounding is missing.
      Also revert companion patch 9d61b995.
      33a2c5ec
  5. 22 Mar, 2015 7 commits
    • Andres Freund's avatar
      Fix minor copy & pasto in the int128 accumulator patch. · 59b0a98a
      Andres Freund authored
      It's unlikely that using PG_GETARG_INT16 instead of PG_GETARG_INT32 in
      this pace can cause actual problems, but this still should be fixed.
      59b0a98a
    • Tom Lane's avatar
      Allow foreign tables to participate in inheritance. · cb1ca4d8
      Tom Lane authored
      Foreign tables can now be inheritance children, or parents.  Much of the
      system was already ready for this, but we had to fix a few things of
      course, mostly in the area of planner and executor handling of row locks.
      
      As side effects of this, allow foreign tables to have NOT VALID CHECK
      constraints (and hence to accept ALTER ... VALIDATE CONSTRAINT), and to
      accept ALTER SET STORAGE and ALTER SET WITH/WITHOUT OIDS.  Continuing to
      disallow these things would've required bizarre and inconsistent special
      cases in inheritance behavior.  Since foreign tables don't enforce CHECK
      constraints anyway, a NOT VALID one is a complete no-op, but that doesn't
      mean we shouldn't allow it.  And it's possible that some FDWs might have
      use for SET STORAGE or SET WITH OIDS, though doubtless they will be no-ops
      for most.
      
      An additional change in support of this is that when a ModifyTable node
      has multiple target tables, they will all now be explicitly identified
      in EXPLAIN output, for example:
      
       Update on pt1  (cost=0.00..321.05 rows=3541 width=46)
         Update on pt1
         Foreign Update on ft1
         Foreign Update on ft2
         Update on child3
         ->  Seq Scan on pt1  (cost=0.00..0.00 rows=1 width=46)
         ->  Foreign Scan on ft1  (cost=100.00..148.03 rows=1170 width=46)
         ->  Foreign Scan on ft2  (cost=100.00..148.03 rows=1170 width=46)
         ->  Seq Scan on child3  (cost=0.00..25.00 rows=1200 width=46)
      
      This was done mainly to provide an unambiguous place to attach "Remote SQL"
      fields, but it is useful for inherited updates even when no foreign tables
      are involved.
      
      Shigeru Hanada and Etsuro Fujita, reviewed by Ashutosh Bapat and Kyotaro
      Horiguchi, some additional hacking by me
      cb1ca4d8
    • Bruce Momjian's avatar
      rm src/test/performance · 8ac356cd
      Bruce Momjian authored
      Last changed in 1997.
      
      Report by Andres Freund
      8ac356cd
    • Bruce Momjian's avatar
      Add TOAST table to pg_shseclabel for long label use · 1c7087af
      Bruce Momjian authored
      Report by Andres Freund
      1c7087af
    • Bruce Momjian's avatar
      Use mmap MAP_NOSYNC option to limit shared memory writes · 34afbba8
      Bruce Momjian authored
      mmap() is rarely used for shared memory, but when it is, this option is
      useful, particularly on the BSDs.
      
      Patch by Sean Chittenden
      34afbba8
    • Bruce Momjian's avatar
      to_char(float4/8): don't print "junk" digits · 9d61b995
      Bruce Momjian authored
      Commit cc0d90b7 also avoids printing
      junk digits, which are digits that are beyond the precision of the
      underlying type.
      9d61b995
    • Bruce Momjian's avatar
      to_char(float4/8): zero pad to specified length · cc0d90b7
      Bruce Momjian authored
      Previously, zero padding was limited to the internal length, rather than
      the specified length.  This allows it to match to_char(int/numeric), which
      always padded to the specified length.
      
      Regression tests added.
      
      BACKWARD INCOMPATIBILITY
      cc0d90b7
  6. 21 Mar, 2015 2 commits
    • Heikki Linnakangas's avatar
      Make pg_xlogdump MSVC build work more like others. · 1933a5bb
      Heikki Linnakangas authored
      Instead of copying xlogreader.c and *desc.c files into the source directory,
      build them where they are. That's what we do for other binaries that need to
      compile and link in files from elsewhere in the source tree.
      
      The commit history suggests that it was done this way because of issues with
      older versions of MSVC. I think this should work, but we'll see if the
      buildfarm complains.
      1933a5bb
    • Bruce Momjian's avatar
      pg_recvlogical: update --help description · 30a5ce8f
      Bruce Momjian authored
      Patch by Euler Taveira
      30a5ce8f
  7. 20 Mar, 2015 4 commits