1. 08 May, 2015 2 commits
    • Andres Freund's avatar
      Remove dependency on ordering in logical decoding upsert test. · 581f4f96
      Andres Freund authored
      Buildfarm member magpie sorted the output differently than intended by
      Peter. "Resolve" the problem by simply not aggregating, it's not that
      many lines.
      581f4f96
    • Andres Freund's avatar
      Add support for INSERT ... ON CONFLICT DO NOTHING/UPDATE. · 168d5805
      Andres Freund authored
      The newly added ON CONFLICT clause allows to specify an alternative to
      raising a unique or exclusion constraint violation error when inserting.
      ON CONFLICT refers to constraints that can either be specified using a
      inference clause (by specifying the columns of a unique constraint) or
      by naming a unique or exclusion constraint.  DO NOTHING avoids the
      constraint violation, without touching the pre-existing row.  DO UPDATE
      SET ... [WHERE ...] updates the pre-existing tuple, and has access to
      both the tuple proposed for insertion and the existing tuple; the
      optional WHERE clause can be used to prevent an update from being
      executed.  The UPDATE SET and WHERE clauses have access to the tuple
      proposed for insertion using the "magic" EXCLUDED alias, and to the
      pre-existing tuple using the table name or its alias.
      
      This feature is often referred to as upsert.
      
      This is implemented using a new infrastructure called "speculative
      insertion". It is an optimistic variant of regular insertion that first
      does a pre-check for existing tuples and then attempts an insert.  If a
      violating tuple was inserted concurrently, the speculatively inserted
      tuple is deleted and a new attempt is made.  If the pre-check finds a
      matching tuple the alternative DO NOTHING or DO UPDATE action is taken.
      If the insertion succeeds without detecting a conflict, the tuple is
      deemed inserted.
      
      To handle the possible ambiguity between the excluded alias and a table
      named excluded, and for convenience with long relation names, INSERT
      INTO now can alias its target table.
      
      Bumps catversion as stored rules change.
      
      Author: Peter Geoghegan, with significant contributions from Heikki
          Linnakangas and Andres Freund. Testing infrastructure by Jeff Janes.
      Reviewed-By: Heikki Linnakangas, Andres Freund, Robert Haas, Simon Riggs,
          Dean Rasheed, Stephen Frost and many others.
      168d5805
  2. 07 May, 2015 7 commits
    • Andres Freund's avatar
      Represent columns requiring insert and update privileges indentently. · 2c8f4836
      Andres Freund authored
      Previously, relation range table entries used a single Bitmapset field
      representing which columns required either UPDATE or INSERT privileges,
      despite the fact that INSERT and UPDATE privileges are separately
      cataloged, and may be independently held.  As statements so far required
      either insert or update privileges but never both, that was
      sufficient. The required permission could be inferred from the top level
      statement run.
      
      The upcoming INSERT ... ON CONFLICT UPDATE feature needs to
      independently check for both privileges in one statement though, so that
      is not sufficient anymore.
      
      Bumps catversion as stored rules change.
      
      Author: Peter Geoghegan
      Reviewed-By: Andres Freund
      2c8f4836
    • Alvaro Herrera's avatar
      Improve BRIN infra, minmax opclass and regression test · db5f98ab
      Alvaro Herrera authored
      The minmax opclass was using the wrong support functions when
      cross-datatypes queries were run.  Instead of trying to fix the
      pg_amproc definitions (which apparently is not possible), use the
      already correct pg_amop entries instead.  This requires jumping through
      more hoops (read: extra syscache lookups) to obtain the underlying
      functions to execute, but it is necessary for correctness.
      
      Author: Emre Hasegeli, tweaked by Álvaro
      Review: Andreas Karlsson
      
      Also change BrinOpcInfo to record each stored type's typecache entry
      instead of just the OID.  Turns out that the full type cache is
      necessary in brin_deform_tuple: the original code used the indexed
      type's byval and typlen properties to extract the stored tuple, which is
      correct in Minmax; but in other implementations that want to store
      something different, that's wrong.  The realization that this is a bug
      comes from Emre also, but I did not use his patch.
      
      I also adopted Emre's regression test code (with smallish changes),
      which is more complete.
      db5f98ab
    • Robert Haas's avatar
      Fix incorrect math in DetermineSafeOldestOffset. · 7be47c56
      Robert Haas authored
      The old formula didn't have enough parentheses, so it would do the wrong
      thing, and it used / rather than % to find a remainder.  The effect of
      these oversights is that the stop point chosen by the logic introduced in
      commit b69bf30b might be rather
      meaningless.
      
      Thomas Munro, reviewed by Kevin Grittner, with a whitespace tweak by me.
      7be47c56
    • Bruce Momjian's avatar
      Makefile: Add comment that doc uninstall clears man directories · 82ec7c95
      Bruce Momjian authored
      Report by Mario Valdez
      82ec7c95
    • Magnus Hagander's avatar
      Properly send SCM status updates when shutting down service on Windows · 1a241d22
      Magnus Hagander authored
      The Service Control Manager should be notified regularly during a shutdown
      that takes a long time. Previously we would increaes the counter, but forgot
      to actually send the notification to the system. The loop counter was also
      incorrectly initalized in the event that the startup of the system took long
      enough for it to increase, which could cause the shutdown process not to wait
      as long as expected.
      
      Krystian Bigaj, reviewed by Michael Paquier
      1a241d22
    • Magnus Hagander's avatar
      Fix indentation that could mask a future bug · d678bde6
      Magnus Hagander authored
      Michael Paquier, spotted using Coverity
      d678bde6
    • Magnus Hagander's avatar
      Fix minor resource leak in pg_dump · aa7cf3ee
      Magnus Hagander authored
      Michael Paquier, spotted using Coverity
      aa7cf3ee
  3. 06 May, 2015 1 commit
  4. 05 May, 2015 7 commits
    • Tom Lane's avatar
    • Tom Lane's avatar
      Fix incorrect declaration of citext's regexp_matches() functions. · b22527f2
      Tom Lane authored
      These functions should return SETOF TEXT[], like the core functions they
      are wrappers for; but they were incorrectly declared as returning just
      TEXT[].  This mistake had two results: first, if there was no match you got
      a scalar null result, whereas what you should get is an empty set (zero
      rows).  Second, the 'g' flag was effectively ignored, since you would get
      only one result array even if there were multiple matches, as reported by
      Jeff Certain.
      
      While ignoring 'g' is a clear bug, the behavior for no matches might well
      have been thought to be the intended behavior by people who hadn't compared
      it carefully to the core regexp_matches() functions.  So we should tread
      carefully about introducing this change in the back branches.  Still, it
      clearly is a bug and so providing some fix is desirable.
      
      After discussion, the conclusion was to introduce the change in a 1.1
      version of the citext extension (as we would need to do anyway); 1.0 still
      contains the incorrect behavior.  1.1 is the default and only available
      version in HEAD, but it is optional in the back branches, where 1.0 remains
      the default version.  People wishing to adopt the fix in back branches will
      need to explicitly do ALTER EXTENSION citext UPDATE TO '1.1'.  (I also
      provided a downgrade script in the back branches, so people could go back
      to 1.0 if necessary.)
      
      This should be called out as an incompatible change in the 9.5 release
      notes, although we'll also document it in the next set of back-branch
      release notes.  The notes should mention that any views or rules that use
      citext's regexp_matches() functions will need to be dropped before
      upgrading to 1.1, and then recreated again afterwards.
      
      Back-patch to 9.1.  The bug goes all the way back to citext's introduction
      in 8.4, but pre-9.1 there is no extension mechanism with which to manage
      the change.  Given the lack of previous complaints it seems unnecessary to
      change this behavior in 9.0, anyway.
      b22527f2
    • Peter Eisentraut's avatar
    • Alvaro Herrera's avatar
      Add geometry/range functions to support BRIN inclusion · 3b6db1f4
      Alvaro Herrera authored
      This commit adds the following functions:
          box(point) -> box
          bound_box(box, box) -> box
          inet_same_family(inet, inet) -> bool
          inet_merge(inet, inet) -> cidr
          range_merge(anyrange, anyrange) -> anyrange
      
      The first of these is also used to implement a new assignment cast from
      point to box.
      
      These functions are the first part of a base to implement an "inclusion"
      operator class for BRIN, for multidimensional data types.
      
      Author: Emre Hasegeli
      Reviewed by: Andreas Karlsson
      3b6db1f4
    • Robert Haas's avatar
      Fix some problems with patch to fsync the data directory. · 456ff086
      Robert Haas authored
      pg_win32_is_junction() was a typo for pgwin32_is_junction().  open()
      was used not only in a two-argument form, which breaks on Windows,
      but also where BasicOpenFile() should have been used.
      
      Per reports from Andrew Dunstan and David Rowley.
      456ff086
    • Peter Eisentraut's avatar
      hstore_plpython: Support tests on Python 2.3 · c0574cd5
      Peter Eisentraut authored
      Python 2.3 does not have the sorted() function, so do it the long way.
      c0574cd5
    • Peter Eisentraut's avatar
      Fix typos · ad8d6d06
      Peter Eisentraut authored
      Author: Erik Rijkers <er@xs4all.nl>
      ad8d6d06
  5. 04 May, 2015 6 commits
    • Robert Haas's avatar
      Use outerPlanState macro instead of referring to leffttree. · 40f42d2a
      Robert Haas authored
      This makes the executor code more consistent.  It also removes
      an apparently superfluous NULL test in nodeGroup.c.
      
      Qingqing Zhou, reviewed by Tom Lane, and further revised by me.
      40f42d2a
    • Tom Lane's avatar
      Improve procost estimates for some text search functions. · 2503982b
      Tom Lane authored
      The text search functions that involve parsing raw text into lexemes are
      remarkably CPU-intensive, so estimating them at the same cost as most other
      built-in functions seems like a mistake; moreover, doing so turns out to
      discourage the optimizer from using functional indexes on these functions.
      After some debate, we've agreed to raise procost from 1 to 100 for
      to_tsvector(), plainto_tsvector(), to_tsquery(), ts_headline(),
      ts_match_tt(), and ts_match_tq(), which are all the text search functions
      that parse raw text.
      
      Also increase procost for the 2-argument form of ts_rewrite()
      (tsquery_rewrite_query); while this function doesn't do text parsing,
      it does execute a user-supplied SQL query, so its previous procost of 1 is
      clearly a drastic underestimate.  It seems reasonable to assign it the same
      cost we assign to PL functions by default, so 100 is the number here too.
      
      I did not bother bumping catversion for this change, since it does not
      break catalog compatibility with the server executable nor result in
      any regression test changes.
      
      Per complaint from Andrew Gierth and subsequent discussion.
      2503982b
    • Robert Haas's avatar
      Recursively fsync() the data directory after a crash. · 2ce439f3
      Robert Haas authored
      Otherwise, if there's another crash, some writes from after the first
      crash might make it to disk while writes from before the crash fail
      to make it to disk.  This could lead to data corruption.
      
      Back-patch to all supported versions.
      
      Abhijit Menon-Sen, reviewed by Andres Freund and slightly revised
      by me.
      2ce439f3
    • Heikki Linnakangas's avatar
      Fix the same-rel optimization when creating WAL records. · ec3d976b
      Heikki Linnakangas authored
      prev_regbuf was never set, and therefore the same-rel flag was never set on
      WAL records.
      
      Report and fix by Zhanq Zq
      ec3d976b
    • Andrew Dunstan's avatar
      Fix two small bugs in json's populate_record_worker · 3c000fd9
      Andrew Dunstan authored
      The first bug is not releasing a tupdesc when doing an early return out
      of the function. The second bug is a logic error in choosing when to do
      an early return if given an empty jsonb object.
      
      Bug reports from Pavel Stehule and Tom Lane respectively.
      
      Backpatch to 9.4 where these were introduced.
      3c000fd9
    • Tom Lane's avatar
      Second try at fixing warnings caused by commit 9b43d73b. · c90b85e4
      Tom Lane authored
      Commit ef3f9e64 suppressed one cause of warnings here, but
      recent clang on OS X is still unhappy because we're passing a "long"
      to abs().  The fact that tm_gmtoff is declared as long is no doubt a
      hangover from days when int might be only 16 bits; but Postgres has
      never been able to run on such machines, so we can just cast it to int
      with no worries.  For consistency, also cast to int in the other
      uses of tm_gmtoff in this stanza.
      
      Note: this code is still broken on machines that don't follow C99
      integer-division-truncates-towards-zero rules.  Given the lack of
      complaints about it, I don't feel a large desire to complicate things
      enough to cope with the pre-C99 rules.
      c90b85e4
  6. 03 May, 2015 4 commits
    • Tom Lane's avatar
      Fix overlooked relcache invalidation in ALTER TABLE ... ALTER CONSTRAINT. · a4820434
      Tom Lane authored
      When altering the deferredness state of a foreign key constraint, we
      correctly updated the catalogs and then invalidated the relcache state for
      the target relation ... but that's not the only relation with relevant
      triggers.  Must invalidate the other table as well, or the state change
      fails to take effect promptly for operations triggered on the other table.
      Per bug #13224 from Christian Ullrich.
      
      In passing, reorganize regression test case for this feature so that it
      isn't randomly injected into the middle of an unrelated test sequence.
      
      Oversight in commit f177cbfe.  Back-patch
      to 9.4 where the faulty code was added.
      a4820434
    • Andrew Dunstan's avatar
      f707b534
    • Andrew Dunstan's avatar
      Enable transforms modules to build and run with Mingw builds. · f802c6dd
      Andrew Dunstan authored
      These modules were all missing essential Windows scaffolding, including
      resources files and descriptions, and links to the relevant library
      import files. This latter item means that the modules can't be built
      with pgxs on Windows, as we don't install the import files. If we ever
      decide to install them this restriction could probably be removed.
      
      Also, as with plperl we need to make sure that perl's CORE directory is
      last on the include list, as on Windows it appears to contain some
      headers with names that clash with names of some headers we include.
      f802c6dd
    • Andrew Dunstan's avatar
      Fix python_includespec on Windows at configure time · b6b2149e
      Andrew Dunstan authored
      By converting to using forward slashes at configure time we avoid
      having to repeat the logic anywhere that this is needed, such as
      in transforms modules for plpython.
      b6b2149e
  7. 02 May, 2015 8 commits
    • Noah Misch's avatar
      Combine initdb tests that successfully create a data directory. · 1a629c1b
      Noah Misch authored
      This eliminates many seconds of test duration and the cause to invoke
      "rm -rf", which is typically unavailable on Windows.
      
      Michael Paquier and Noah Misch
      1a629c1b
    • Noah Misch's avatar
      Fix one more TAP test to use standard command-line argument ordering. · 84c08a76
      Noah Misch authored
      Commit c67a86f7 caught most of these,
      but this negative test escaped notice.  The test did pass, for the wrong
      reason, under affected configurations.
      
      Michael Paquier
      84c08a76
    • Noah Misch's avatar
      Rename coerce_type() local variable. · b339a5cf
      Noah Misch authored
      coerce_type() has local variables named targetTypeId, baseTypeId, and
      targetType.  targetType has been the Type structure for baseTypeId, so
      rename it to baseType.
      b339a5cf
    • Peter Eisentraut's avatar
    • Peter Eisentraut's avatar
      hstore_plperl: Move port-specific parts to later in the makefile · e30a8649
      Peter Eisentraut authored
      PORTNAME isn't set until the global makefiles have been included.
      e30a8649
    • Peter Eisentraut's avatar
      Fix shared libpython detection on OS X · 010aa420
      Peter Eisentraut authored
      Apparently, looking for an appropriately named file doesn't work on some
      older versions, so put the back the explicit platform detection.
      010aa420
    • Peter Eisentraut's avatar
      Make hstore_plperl's build even more like plperl's · 0fd76464
      Peter Eisentraut authored
      Combine the two places that set CPPFLAGS into one.  Also, some settings
      should be restricted to Windows only.  More precisely, -Wno-comment is
      a GCC-only option, but Windows in a makefile implies GCC at the moment.
      
      Also, since -Wno-comment is more properly a preprocessor option, move it
      to CPPFLAGS to simplify things a bit.
      0fd76464
    • Peter Eisentraut's avatar
      Move interpreter shared library detection to configure · d664a10f
      Peter Eisentraut authored
      For building PL/Perl, PL/Python, and PL/Tcl, we need a shared library of
      libperl, libpython, and libtcl, respectively.  Previously, this was
      checked in the makefiles, skipping the PL build with a warning if no
      shared library was available.  Now this is checked in configure, with an
      error if no shared library is available.
      
      The previous situation arose because in the olden days, the configure
      options --with-perl, --with-python, and --with-tcl controlled whether
      frontend interfaces for those languages would be built.  The procedural
      languages were added later, and shared libraries were often not
      available in the beginning.  So it was decided skip the builds of the
      procedural languages in those cases.  The frontend interfaces have since
      been removed from the tree, and shared libraries are now available most
      of the time, so that setup makes much less sense now.
      
      Also, the new setup allows contrib modules and pgxs users to rely on the
      respective PLs being available based on configure flags.
      d664a10f
  8. 01 May, 2015 5 commits
    • Andrew Dunstan's avatar
      Make hstore_plperl's build more like plperl's · 77477e74
      Andrew Dunstan authored
      This involves moving perl's CORE library to the end of the include list,
      and adding other compilation settings that plperl uses. This won't
      completely fix the breakage currently being seen by gcc builds on
      Windows, but it will let the build get further, and should be wholly
      benign, if not beneficial, on *nix.
      77477e74
    • Bruce Momjian's avatar
      Mark views created from tables as replication identity 'nothing' · b2f95c34
      Bruce Momjian authored
      pg_dump turns tables into views using a method that was not setting
      pg_class.relreplident properly.
      
      Patch by Marko Tiikkaja
      
      Backpatch through 9.4
      b2f95c34
    • Robert Haas's avatar
      Deparse named arguments to use the new => operator instead of := · e044a449
      Robert Haas authored
      Tom Lane pointed out that this wasn't done, and asked whether that was
      intentional.  Subsequent discussion was in favor of making the change,
      so here we go.
      e044a449
    • Robert Haas's avatar
      Allow FDWs and custom scan providers to replace joins with scans. · e7cb7ee1
      Robert Haas authored
      Foreign data wrappers can use this capability for so-called "join
      pushdown"; that is, instead of executing two separate foreign scans
      and then joining the results locally, they can generate a path which
      performs the join on the remote server and then is scanned locally.
      This commit does not extend postgres_fdw to take advantage of this
      capability; it just provides the infrastructure.
      
      Custom scan providers can use this in a similar way.  Previously,
      it was only possible for a custom scan provider to scan a single
      relation.  Now, it can scan an entire join tree, provided of course
      that it knows how to produce the same results that the join would
      have produced if executed normally.
      
      KaiGai Kohei, reviewed by Shigeru Hanada, Ashutosh Bapat, and me.
      e7cb7ee1
    • Andres Freund's avatar
      Copy editing of the replication origins patch. · 2b22795b
      Andres Freund authored
      Michael Paquier and myself.
      2b22795b