1. 24 Mar, 2015 2 commits
    • 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
  2. 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
  3. 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
  4. 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
  5. 20 Mar, 2015 11 commits
  6. 19 Mar, 2015 4 commits
    • Stephen Frost's avatar
      GetUserId() changes to has_privs_of_role() · bf038899
      Stephen Frost authored
      The pg_stat and pg_signal-related functions have been using GetUserId()
      instead of has_privs_of_role() for checking if the current user should
      be able to see details in pg_stat_activity or signal other processes,
      requiring a user to do 'SET ROLE' for inheirited roles for a permissions
      check, unlike other permissions checks.
      
      This patch changes that behavior to, instead, act like most other
      permission checks and use has_privs_of_role(), removing the 'SET ROLE'
      need.  Documentation and error messages updated accordingly.
      
      Per discussion with Alvaro, Peter, Adam (though not using Adam's patch),
      and Robert.
      
      Reviewed by Jeevan Chalke.
      bf038899
    • Robert Haas's avatar
      Add flags argument to dsm_create. · 12968cf4
      Robert Haas authored
      Right now, there's only one flag, DSM_CREATE_NULL_IF_MAXSEGMENTS,
      which suppresses the error that would normally be thrown when the
      maximum number of segments already exists, instead returning NULL.
      It might be useful to add more flags in the future, such as one to
      ignore allocation errors, but I haven't done that here.
      12968cf4
    • Bruce Momjian's avatar
      doc: ALTER DOMAIN VALIDATE CONSTRAINT can also fail · 5f286c02
      Bruce Momjian authored
      Document that ALTER DOMAIN VALIDATE CONSTRAINT can also fail for
      composite types.
      
      Report by Ondřej Bouda
      5f286c02
    • Robert Haas's avatar
      Fix status reporting for terminated bgworkers that were never started. · bf740ce9
      Robert Haas authored
      Previously, GetBackgroundWorkerPid() would return BGWH_NOT_YET_STARTED
      if the slot used for the worker registration had not been reused by
      unrelated activity, and BGWH_STOPPED if it had.  Either way, a process
      that had requested notification when the state of one of its
      background workers changed did not receive such notifications.  Fix
      things so that GetBackgroundWorkerPid() always returns BGWH_STOPPED in
      this situation, so that we do not erroneously give waiters the
      impression that the worker will eventually be started; and send
      notifications just as we would if the process terminated after having
      been started, so that it's possible to wait for the postmaster to
      process a worker termination request without polling.
      
      Discovered by Amit Kapila during testing of parallel sequential scan.
      Analysis and fix by me.  Back-patch to 9.4; there may not be anyone
      relying on this interface yet, but if anyone is, the new behavior is a
      clear improvement.
      bf740ce9
  7. 18 Mar, 2015 5 commits
    • Bruce Momjian's avatar
      pg_upgrade: document use of rsync for slave upgrades · 417f78a5
      Bruce Momjian authored
      Also document that rsync has one-second granularity for file
      change comparisons.
      
      Report by Stephen Frost
      417f78a5
    • Alvaro Herrera's avatar
      array_offset() and array_offsets() · 13dbc7a8
      Alvaro Herrera authored
      These functions return the offset position or positions of a value in an
      array.
      
      Author: Pavel Stěhule
      Reviewed by: Jim Nasby
      13dbc7a8
    • Alvaro Herrera's avatar
      Install shared libraries to bin/ in Windows under MSVC · f9dead56
      Alvaro Herrera authored
      Since commit cb4a3b04 we were already doing this for the Cygwin/mingw
      toolchains, but MSVC had not been updated to do it.  At Install.pm time,
      the Makefile (or GNUmakefile) is inspected, and if a line matching
      SO_MAJOR_VERSION is found (indicating a shared library is being built),
      then files with the .dll extension are set to be installed in bin/
      rather than lib/, while files with .lib extension are installed in lib/.
      This makes the MSVC toolchain up to date with cygwin/mingw.
      
      This removes ad-hoc hacks that were copying files into bin/ or lib/
      manually (libpq.dll in particular was already being copied into bin).
      So while this is a rather ugly kludge, it's still cleaner than what was
      there before.
      
      Author: Michael Paquier
      Reviewed by: Asif Naeem
      f9dead56
    • Alvaro Herrera's avatar
      Setup cursor position for schema-qualified elements · b8d226b4
      Alvaro Herrera authored
      This makes any errors thrown while looking up such schemas report the
      position of the error.
      
      Author: Ryan Kelly
      Reviewed by: Jeevan Chalke, Tom Lane
      b8d226b4
    • Alvaro Herrera's avatar
      Rationalize vacuuming options and parameters · 0d831389
      Alvaro Herrera authored
      We were involving the parser too much in setting up initial vacuuming
      parameters.  This patch moves that responsibility elsewhere to simplify
      code, and also to make future additions easier.  To do this, create a
      new struct VacuumParams which is filled just prior to vacuum execution,
      instead of at parse time; for user-invoked vacuuming this is set up in a
      new function ExecVacuum, while autovacuum sets it up by itself.
      
      While at it, add a new member VACOPT_SKIPTOAST to enum VacuumOption,
      only set by autovacuum, which is used to disable vacuuming of the toast
      table instead of the old do_toast parameter; this relieves the argument
      list of vacuum() and some callees a bit.  This partially makes up for
      having added more arguments in an effort to avoid having autovacuum from
      constructing a VacuumStmt parse node.
      
      Author: Michael Paquier. Some tweaks by Álvaro
      Reviewed by: Robert Haas, Stephen Frost, Álvaro Herrera
      0d831389
  8. 17 Mar, 2015 1 commit
    • Andres Freund's avatar
      Remove docs missed in 51c11a70. · 4559167c
      Andres Freund authored
      Somehow I misresolved a merge conflict when forward porting Petr's patch
      leading to a section of the docs remaining...
      
      Thankfully Fujii spotted my mistake.
      4559167c