1. 29 Nov, 2014 3 commits
  2. 28 Nov, 2014 8 commits
    • Alvaro Herrera's avatar
      Fix BRIN operator family definitions · 816e10d8
      Alvaro Herrera authored
      The original definitions were leaving no room for cross-type operators,
      so queries that compared a column of one type against something of a
      different type were not taking advantage of the index.  Fix by making
      the opfamilies more like the ones for Btree, and include a few
      cross-type operator classes.
      
      Catalog version bumped.
      
      Per complaints from Hubert Lubaczewski, Mark Wong, Heikki Linnakangas.
      816e10d8
    • Alvaro Herrera's avatar
      Update transaction README for persistent multixacts · ae04bf50
      Alvaro Herrera authored
      Multixacts are now maintained during recovery, but the README didn't get
      the memo.  Backpatch to 9.3, where the divergence was introduced.
      ae04bf50
    • Tom Lane's avatar
      Add bms_get_singleton_member(), and use it where appropriate. · d25367ec
      Tom Lane authored
      This patch adds a function that replaces a bms_membership() test followed
      by a bms_singleton_member() call, performing both the test and the
      extraction of a singleton set's member in one scan of the bitmapset.
      The performance advantage over the old way is probably minimal in current
      usage, but it seems worthwhile on notational grounds anyway.
      
      David Rowley
      d25367ec
    • Tom Lane's avatar
      Add bms_next_member(), and use it where appropriate. · f4e031c6
      Tom Lane authored
      This patch adds a way of iterating through the members of a bitmapset
      nondestructively, unlike the old way with bms_first_member().  While
      bms_next_member() is very slightly slower than bms_first_member()
      (at least for typical-size bitmapsets), eliminating the need to palloc
      and pfree a temporary copy of the target bitmapset is a significant win.
      So this method should be preferred in all cases where a temporary copy
      would be necessary.
      
      Tom Lane, with suggestions from Dean Rasheed and David Rowley
      f4e031c6
    • Tom Lane's avatar
      Improve performance of OverrideSearchPathMatchesCurrent(). · 96d66bcf
      Tom Lane authored
      This function was initially coded on the assumption that it would not be
      performance-critical, but that turns out to be wrong in workloads that
      are heavily dependent on the speed of plpgsql functions.  Speed it up by
      hard-coding the comparison rules, thereby avoiding palloc/pfree traffic
      from creating and immediately freeing an OverrideSearchPath object.
      Per report from Scott Marlowe.
      96d66bcf
    • Tom Lane's avatar
      Improve typcache: cache negative lookup results, add invalidation logic. · e384ed6c
      Tom Lane authored
      Previously, if the typcache had for example tried and failed to find a hash
      opclass for a given data type, it would nonetheless repeat the unsuccessful
      catalog lookup each time it was asked again.  This can lead to a
      significant amount of useless bufmgr traffic, as in a recent report from
      Scott Marlowe.  Like the catalog caches, typcache should be able to cache
      negative results.  This patch arranges that by making use of separate flag
      bits to remember whether a particular item has been looked up, rather than
      treating a zero OID as an indicator that no lookup has been done.
      
      Also, install a credible invalidation mechanism, namely watching for inval
      events in pg_opclass.  The sole advantage of the lack of negative caching
      was that the code would cope if operators or opclasses got added for a type
      mid-session; to preserve that behavior we have to be able to invalidate
      stale lookup results.  Updates in pg_opclass should be pretty rare in
      production systems, so it seems sufficient to just invalidate all the
      dependent data whenever one happens.
      
      Adding proper invalidation also means that this code will now react sanely
      if an opclass is dropped mid-session.  Arguably, that's a back-patchable
      bug fix, but in view of the lack of complaints from the field I'll refrain
      from back-patching.  (Probably, in most cases where an opclass is dropped,
      the data type itself is dropped soon after, so that this misfeasance has
      no bad consequences.)
      e384ed6c
    • Fujii Masao's avatar
      Add tab-completion for ALTER TABLE ALTER CONSTRAINT in psql. · 202cbdf7
      Fujii Masao authored
      Back-patch to 9.4 where ALTER TABLE ALTER CONSTRAINT was added.
      
      Michael Paquier, bug reported by Andrey Lizenko.
      202cbdf7
    • Heikki Linnakangas's avatar
      Fix assertion failure at end of PITR. · afeacd27
      Heikki Linnakangas authored
      InitXLogInsert() cannot be called in a critical section, because it
      allocates memory. But CreateCheckPoint() did that, when called for the
      end-of-recovery checkpoint by the startup process.
      
      In the passing, fix the scratch space allocation in InitXLogInsert to go to
      the right memory context. Also update the comment at InitXLOGAccess, which
      hasn't been totally accurate since hot standby was introduced (in a hot
      standby backend, InitXLOGAccess isn't called at backend startup).
      
      Reported by Michael Paquier
      afeacd27
  3. 27 Nov, 2014 4 commits
    • Fujii Masao's avatar
      Make \watch respect the user's \pset null setting. · a5eb85eb
      Fujii Masao authored
      Previously \watch always ignored the user's \pset null setting.
      \pset null setting should be ignored for \d and similar queries.
      For those, the code can reasonably have an opinion about what
      the presentation should be like, since it knows what SQL query
      it's issuing. This argument surely doesn't apply to \watch,
      so this commit makes \watch use the user's \pset null setting.
      
      Back-patch to 9.3 where \watch was added.
      a5eb85eb
    • Fujii Masao's avatar
      Mark response messages for translation in pg_isready. · e656f5d2
      Fujii Masao authored
      Back-patch to 9.3 where pg_isready was added.
      
      Mats Erik Andersson
      e656f5d2
    • Tom Lane's avatar
      Free libxml2/libxslt resources in a safer order. · c168ba31
      Tom Lane authored
      Mark Simonetti reported that libxslt sometimes crashes for him, and that
      swapping xslt_process's object-freeing calls around to do them in reverse
      order of creation seemed to fix it.  I've not reproduced the crash, but
      valgrind clearly shows a reference to already-freed memory, which is
      consistent with the idea that shutdown of the xsltTransformContext is
      trying to reference the already-freed stylesheet or input document.
      With this patch, valgrind is no longer unhappy.
      
      I have an inquiry in to see if this is a libxslt bug or if we're just
      abusing the library; but even if it's a library bug, we'd want to adjust
      our code so it doesn't fail with unpatched libraries.
      
      Back-patch to all supported branches, because we've been doing this in
      the wrong(?) order for a long time.
      c168ba31
    • Stephen Frost's avatar
      Rename pg_rowsecurity -> pg_policy and other fixes · 143b39c1
      Stephen Frost authored
      As pointed out by Robert, we should really have named pg_rowsecurity
      pg_policy, as the objects stored in that catalog are policies.  This
      patch fixes that and updates the column names to start with 'pol' to
      match the new catalog name.
      
      The security consideration for COPY with row level security, also
      pointed out by Robert, has also been addressed by remembering and
      re-checking the OID of the relation initially referenced during COPY
      processing, to make sure it hasn't changed under us by the time we
      finish planning out the query which has been built.
      
      Robert and Alvaro also commented on missing OCLASS and OBJECT entries
      for POLICY (formerly ROWSECURITY or POLICY, depending) in various
      places.  This patch fixes that too, which also happens to add the
      ability to COMMENT on policies.
      
      In passing, attempt to improve the consistency of messages, comments,
      and documentation as well.  This removes various incarnations of
      'row-security', 'row-level security', 'Row-security', etc, in favor
      of 'policy', 'row level security' or 'row_security' as appropriate.
      
      Happy Thanksgiving!
      143b39c1
  4. 26 Nov, 2014 3 commits
  5. 25 Nov, 2014 11 commits
    • Simon Riggs's avatar
      Remove extraneous SGML tag · b7a71580
      Simon Riggs authored
      b7a71580
    • Tom Lane's avatar
      Fix uninitialized-variable warning. · d934a052
      Tom Lane authored
      In passing, add an Assert defending the presumption that bytes_left
      is positive to start with.  (I'm not exactly convinced that using an
      unsigned type was such a bright thing here, but let's at least do
      this much.)
      d934a052
    • Simon Riggs's avatar
      action_at_recovery_target recovery config option · aedccb1f
      Simon Riggs authored
      action_at_recovery_target = pause | promote | shutdown
      
      Petr Jelinek
      
      Reviewed by Muhammad Asif Naeem, Fujji Masao and
      Simon Riggs
      aedccb1f
    • Tom Lane's avatar
      De-reserve most statement-introducing keywords in plpgsql. · bb1b8f69
      Tom Lane authored
      Add a bit of context sensitivity to plpgsql_yylex() so that it can
      recognize when the word it is looking at is the first word of a new
      statement, and if so whether it is the target of an assignment statement.
      When we are at start of statement and it's not an assignment, we can
      prefer recognizing unreserved keywords over recognizing variable names,
      thereby allowing most statements' initial keywords to be demoted from
      reserved to unreserved status.  This is rather useful already (there are
      15 such words that get demoted here), and what's more to the point is
      that future patches proposing to add new plpgsql statements can avoid
      objections about having to add new reserved words.
      
      The keywords BEGIN, DECLARE, FOR, FOREACH, LOOP, WHILE need to remain
      reserved because they can be preceded by block labels, and the logic
      added here doesn't understand about block labels.  In principle we
      could probably fix that, but it would take more than one token of
      lookback and the benefit doesn't seem worth extra complexity.
      
      Also note I didn't de-reserve EXECUTE, because it is used in more places
      than just statement start.  It's possible it could be de-reserved with
      more work, but that would be an independent fix.
      
      In passing, also de-reserve COLLATE and DEFAULT, which shouldn't have
      been reserved in the first place since they only need to be recognized
      within DECLARE sections.
      bb1b8f69
    • Tom Lane's avatar
      Support arrays as input to array_agg() and ARRAY(SELECT ...). · bac27394
      Tom Lane authored
      These cases formerly failed with errors about "could not find array type
      for data type".  Now they yield arrays of the same element type and one
      higher dimension.
      
      The implementation involves creating functions with API similar to the
      existing accumArrayResult() family.  I (tgl) also extended the base family
      by adding an initArrayResult() function, which allows callers to avoid
      special-casing the zero-inputs case if they just want an empty array as
      result.  (Not all do, so the previous calling convention remains valid.)
      This allowed simplifying some existing code in xml.c and plperl.c.
      
      Ali Akbar, reviewed by Pavel Stehule, significantly modified by me
      bac27394
    • Stephen Frost's avatar
      Add int64 -> int8 mapping to genbki · 25976710
      Stephen Frost authored
      Per discussion with Tom and Andrew, 64bit integers are no longer a
      problem for the catalogs, so go ahead and add the mapping from the C
      int64 type to the int8 SQL identification to allow using them.
      
      Patch by Adam Brightwell
      25976710
    • Heikki Linnakangas's avatar
      Allow using connection URI in primary_conninfo. · b3fc6727
      Heikki Linnakangas authored
      The old method of appending options to the connection string didn't work if
      the primary_conninfo was a postgres:// style URI, instead of a traditional
      connection string. Use PQconnectdbParams instead.
      
      Alex Shulgin
      b3fc6727
    • Heikki Linnakangas's avatar
      Allow "dbname" from connection string to be overridden in PQconnectDBParams · add1b052
      Heikki Linnakangas authored
      If the "dbname" attribute in PQconnectDBParams contained a connection string
      or URI (and expand_dbname = TRUE), the database name from the connection
      string could not be overridden by a subsequent "dbname" keyword in the
      array. That was not intentional; all other options can be overridden.
      Furthermore, any subsequent "dbname" caused the connection string from the
      first dbname value to be processed again, overriding any values for the same
      options that were given between the connection string and the second dbname
      option.
      
      In the passing, clarify in the docs that only the first dbname option in the
      array is parsed as a connection string.
      
      Alex Shulgin. Backpatch to all supported versions.
      add1b052
    • Stephen Frost's avatar
      Suppress DROP CASCADE notices in regression tests · 81d815dc
      Stephen Frost authored
      In the regression tests, when doing cascaded drops, we need to suppress
      the notices from DROP CASCADE or there can be transient regression
      failures as the order of drops can depend on the physical row order in
      pg_depend.
      
      Report and fix suggestion from Tom.
      81d815dc
    • Heikki Linnakangas's avatar
      Check return value of strdup() in libpq connection option parsing. · 30bf4689
      Heikki Linnakangas authored
      An out-of-memory in most of these would lead to strange behavior, like
      connecting to a different database than intended, but some would lead to
      an outright segfault.
      
      Alex Shulgin and me. Backpatch to all supported versions.
      30bf4689
    • Heikki Linnakangas's avatar
      Make Port->ssl_in_use available, even when built with !USE_SSL · e453cc27
      Heikki Linnakangas authored
      Code that check the flag no longer need #ifdef's, which is more convenient.
      In particular, makes it easier to write extensions that depend on it.
      
      In the passing, modify sslinfo's ssl_is_used function to check ssl_in_use
      instead of the OpenSSL specific 'ssl' pointer. It doesn't make any
      difference currently, as sslinfo is only compiled when built with OpenSSL,
      but seems cleaner anyway.
      e453cc27
  6. 24 Nov, 2014 3 commits
  7. 23 Nov, 2014 4 commits
    • Tom Lane's avatar
      Get rid of redundant production in plpgsql grammar. · e2dc3f57
      Tom Lane authored
      There may once have been a reason for the intermediate proc_stmts
      production in the plpgsql grammar, but it isn't doing anything useful
      anymore, so let's collapse it into proc_sect.  Saves some code and
      probably a small number of nanoseconds per statement list.
      
      In passing, correctly alphabetize keyword lists to match pl_scanner.c;
      note that for "rowtype" vs "row_count", pl_scanner.c must sort on the
      basis of the lower-case spelling.
      
      Noted while fooling with a patch to de-reserve more plpgsql keywords.
      e2dc3f57
    • Andrew Dunstan's avatar
      02d5ab6a
    • Noah Misch's avatar
      Detect PG_PRINTF_ATTRIBUTE automatically. · b779168f
      Noah Misch authored
      This eliminates gobs of "unrecognized format function type" warnings
      under MinGW compilers predating GCC 4.4.
      b779168f
    • Tom Lane's avatar
      Allow simplification of EXISTS() subqueries containing LIMIT. · b62f94c6
      Tom Lane authored
      The locution "EXISTS(SELECT ... LIMIT 1)" seems to be rather common among
      people who don't realize that the database already performs optimizations
      equivalent to putting LIMIT 1 in the sub-select.  Unfortunately, this was
      actually making things worse, because it prevented us from optimizing such
      EXISTS clauses into semi or anti joins.  Teach simplify_EXISTS_query() to
      suppress constant-positive LIMIT clauses.  That fixes the semi/anti-join
      case, and may help marginally even for cases that have to be left as
      sub-SELECTs.
      
      Marti Raudsepp, reviewed by David Rowley
      b62f94c6
  8. 22 Nov, 2014 2 commits
    • Tom Lane's avatar
      Fix mishandling of system columns in FDW queries. · 9c581011
      Tom Lane authored
      postgres_fdw would send query conditions involving system columns to the
      remote server, even though it makes no effort to ensure that system
      columns other than CTID match what the remote side thinks.  tableoid,
      in particular, probably won't match and might have some use in queries.
      Hence, prevent sending conditions that include non-CTID system columns.
      
      Also, create_foreignscan_plan neglected to check local restriction
      conditions while determining whether to set fsSystemCol for a foreign
      scan plan node.  This again would bollix the results for queries that
      test a foreign table's tableoid.
      
      Back-patch the first fix to 9.3 where postgres_fdw was introduced.
      Back-patch the second to 9.2.  The code is probably broken in 9.1 as
      well, but the patch doesn't apply cleanly there; given the weak state
      of support for FDWs in 9.1, it doesn't seem worth fixing.
      
      Etsuro Fujita, reviewed by Ashutosh Bapat, and somewhat modified by me
      9c581011
    • Andrew Dunstan's avatar
      Rework echo_hidden for \sf and \ef from commit e4d28175. · eca2b9ba
      Andrew Dunstan authored
      PSQLexec's error reporting turns out to be too verbose for this case, so
      revert to using PQexec instead with minimal error reporting. Prior to
      calling PQexec, we call a function that mimics just the echo_hidden
      piece of PSQLexec.
      eca2b9ba
  9. 21 Nov, 2014 2 commits
    • Tom Lane's avatar
      Rearrange CustomScan API. · 44777040
      Tom Lane authored
      Make it work more like FDW plans do: instead of assuming that there are
      expressions in a CustomScan plan node that the core code doesn't know
      about, insist that all subexpressions that need planner attention be in
      a "custom_exprs" list in the Plan representation.  (Of course, the
      custom plugin can break the list apart again at executor initialization.)
      This lets us revert the parts of the patch that exposed setrefs.c and
      subselect.c processing to the outside world.
      
      Also revert the GetSpecialCustomVar stuff in ruleutils.c; that concept
      may work in future, but it's far from fully baked right now.
      44777040
    • Tom Lane's avatar
      Simplify API for initially hooking custom-path providers into the planner. · c2ea2285
      Tom Lane authored
      Instead of register_custom_path_provider and a CreateCustomScanPath
      callback, let's just provide a standard function hook in set_rel_pathlist.
      This is more flexible than what was previously committed, is more like the
      usual conventions for planner hooks, and requires less support code in the
      core.  We had discussed this design (including centralizing the
      set_cheapest() calls) back in March or so, so I'm not sure why it wasn't
      done like this already.
      c2ea2285