1. 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
  2. 26 Nov, 2014 3 commits
  3. 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
  4. 24 Nov, 2014 3 commits
  5. 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
  6. 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
  7. 21 Nov, 2014 9 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
    • Andrew Dunstan's avatar
      Fix an error in psql that overcounted output lines. · 4077fb4d
      Andrew Dunstan authored
      This error counted the first line of a cell as "extra". The effect was
      to cause far too frequent invocation of the pager. In most cases this
      can be worked around (for example, by using the "less" pager with the -F
      flag), so don't backpatch.
      4077fb4d
    • Andrew Dunstan's avatar
      Make psql's \sf and \ef honor ECHO_HIDDEN. · e4d28175
      Andrew Dunstan authored
      These commands were calling the database direct rather than  calling
      PSQLexec like other slash commands that needed database data.
      
      The code is also changed not to pass the connection as a parameter to
      the helper functions. It's available in a global variable, and that's
      what PSQLexec uses.
      e4d28175
    • Heikki Linnakangas's avatar
      622983ea
    • Heikki Linnakangas's avatar
      Add a comment to regress.c explaining what it contains. · b10a97b8
      Heikki Linnakangas authored
      Ian Barwick
      b10a97b8
    • Heikki Linnakangas's avatar
      Fix bogus comments in XLogRecordAssemble · 8f5dcb56
      Heikki Linnakangas authored
      Pointed out by Michael Paquier
      8f5dcb56
    • Heikki Linnakangas's avatar
      Add pageinspect functions for inspecting GIN indexes. · 3a82bc6f
      Heikki Linnakangas authored
      Patch by me, Peter Geoghegan and Michael Paquier, reviewed by Amit Kapila.
      3a82bc6f
    • Tom Lane's avatar
      Remove dead code supporting mark/restore in SeqScan, TidScan, ValuesScan. · adbfab11
      Tom Lane authored
      There seems no prospect that any of this will ever be useful, and indeed
      it's questionable whether some of it would work if it ever got called;
      it's certainly not been exercised in a very long time, if ever. So let's
      get rid of it, and make the comments about mark/restore in execAmi.c less
      wishy-washy.
      
      The mark/restore support for Result nodes is also currently dead code,
      but that's due to planner limitations not because it's impossible that
      it could be useful.  So I left it in.
      adbfab11
  8. 20 Nov, 2014 4 commits
    • Tom Lane's avatar
      Initial code review for CustomScan patch. · a34fa8ee
      Tom Lane authored
      Get rid of the pernicious entanglement between planner and executor headers
      introduced by commit 0b03e595.
      
      Also, rearrange the CustomFoo struct/typedef definitions so that all the
      typedef names are seen as used by the compiler.  Without this pgindent
      will mess things up a bit, which is not so important perhaps, but it also
      removes a bizarre discrepancy between the declaration arrangement used for
      CustomExecMethods and that used for CustomScanMethods and
      CustomPathMethods.
      
      Clean up the commentary around ExecSupportsMarkRestore to reflect the
      rather large change in its API.
      
      Const-ify register_custom_path_provider's argument.  This necessitates
      casting away const in the function, but that seems better than forcing
      callers of the function to do so (or else not const-ify their method
      pointer structs, which was sort of the whole point).
      
      De-export fix_expr_common.  I don't like the exporting of fix_scan_expr
      or replace_nestloop_params either, but this one surely has got little
      excuse.
      a34fa8ee
    • Tom Lane's avatar
      Fix another oversight in CustomScan patch. · 081a6048
      Tom Lane authored
      execCurrent.c's search_plan_tree() must recognize a CustomScan on the
      target relation.  This would only be helpful for custom providers that
      support CurrentOfExpr quals, which is probably a bit far-fetched, but
      it's not impossible I think.  But even without assuming that, we need
      to recognize a scanned-relation match so that we will properly throw
      error if the desired relation is being scanned with both a CustomScan
      and a regular scan (ie, self-join).
      
      Also recognize ForeignScanState for similar reasons.  Supporting WHERE
      CURRENT OF on a foreign table is probably even more far-fetched than
      it is for custom scans, but I think in principle you could do it with
      postgres_fdw (or another FDW that supports the ctid column).  This
      would be a back-patchable bug fix if existing FDWs handled CurrentOfExpr,
      but I doubt any do so I won't bother back-patching.
      081a6048
    • Tom Lane's avatar
      Fix another oversight in CustomScan patch. · 03e574af
      Tom Lane authored
      disuse_physical_tlist() must work for all plan types handled by
      create_scan_plan().
      03e574af
    • Tom Lane's avatar
      Remove no-longer-needed phony typedefs in genbki.h. · c5111ea9
      Tom Lane authored
      Now that we have a policy of hiding varlena catalog fields behind
      "#ifdef CATALOG_VARLEN", there is no need for their type names to be
      acceptable to the C compiler.  And experimentation shows that it does
      not matter to pgindent either.  (If it did, we'd have problems anyway,
      since these typedefs are unreferenced so far as the C compiler is
      concerned, and find_typedef fails to identify such typedefs.)
      
      Hence, remove the phony typedefs that genbki.h provided to make
      some varlena field definitions compilable.
      
      In passing, rearrange #define's into what seemed a more logical order.
      c5111ea9