1. 25 Nov, 2014 6 commits
    • 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
  2. 24 Nov, 2014 3 commits
  3. 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
  4. 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
  5. 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
  6. 20 Nov, 2014 8 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
    • Tom Lane's avatar
      Add missing case for CustomScan. · f9e0255c
      Tom Lane authored
      Per KaiGai Kohei.
      
      In passing improve formatting of some code added in commit 30d7ae3c,
      because otherwise pgindent will make a mess of it.
      f9e0255c
    • Heikki Linnakangas's avatar
      Silence compiler warning about variable being used uninitialized. · f4640421
      Heikki Linnakangas authored
      It's a false positive - the variable is only used when 'onleft' is true,
      and it is initialized in that case. But the compiler doesn't necessarily
      see that.
      f4640421
    • Heikki Linnakangas's avatar
      Revamp the WAL record format. · 2c03216d
      Heikki Linnakangas authored
      Each WAL record now carries information about the modified relation and
      block(s) in a standardized format. That makes it easier to write tools that
      need that information, like pg_rewind, prefetching the blocks to speed up
      recovery, etc.
      
      There's a whole new API for building WAL records, replacing the XLogRecData
      chains used previously. The new API consists of XLogRegister* functions,
      which are called for each buffer and chunk of data that is added to the
      record. The new API also gives more control over when a full-page image is
      written, by passing flags to the XLogRegisterBuffer function.
      
      This also simplifies the XLogReadBufferForRedo() calls. The function can dig
      the relation and block number from the WAL record, so they no longer need to
      be passed as arguments.
      
      For the convenience of redo routines, XLogReader now disects each WAL record
      after reading it, copying the main data part and the per-block data into
      MAXALIGNed buffers. The data chunks are not aligned within the WAL record,
      but the redo routines can assume that the pointers returned by XLogRecGet*
      functions are. Redo routines are now passed the XLogReaderState, which
      contains the record in the already-disected format, instead of the plain
      XLogRecord.
      
      The new record format also makes the fixed size XLogRecord header smaller,
      by removing the xl_len field. The length of the "main data" portion is now
      stored at the end of the WAL record, and there's a separate header after
      XLogRecord for it. The alignment padding at the end of XLogRecord is also
      removed. This compansates for the fact that the new format would otherwise
      be more bulky than the old format.
      
      Reviewed by Andres Freund, Amit Kapila, Michael Paquier, Alvaro Herrera,
      Fujii Masao.
      2c03216d
    • Peter Eisentraut's avatar
      Fix suggested layout for PGXS makefile · 8dc626de
      Peter Eisentraut authored
      Custom rules must come after pgxs inclusion, not before, because any
      rule added before pgxs will break the default 'all' target.
      
      Author: Cédric Villemain <cedric@2ndquadrant.fr>
      8dc626de
  7. 19 Nov, 2014 6 commits
    • Tom Lane's avatar
      Improve documentation's description of JOIN clauses. · 8372304e
      Tom Lane authored
      In bug #12000, Andreas Kunert complained that the documentation was
      misleading in saying "FROM T1 CROSS JOIN T2 is equivalent to FROM T1, T2".
      That's correct as far as it goes, but the equivalence doesn't hold when
      you consider three or more tables, since JOIN binds more tightly than
      comma.  I added a <note> to explain this, and ended up rearranging some
      of the existing text so that the note would make sense in context.
      
      In passing, rewrite the description of JOIN USING, which was unnecessarily
      vague, and hadn't been helped any by somebody's reliance on markup as a
      substitute for clear writing.  (Mostly this involved reintroducing a
      concrete example that was unaccountably removed by commit 032f3b7e.)
      
      Back-patch to all supported branches.
      8372304e
    • Heikki Linnakangas's avatar
      Add test cases for indexam operations not currently covered. · 88fc7192
      Heikki Linnakangas authored
      That includes VACUUM on GIN, GiST and SP-GiST indexes, and B-tree indexes
      large enough to cause page deletions in B-tree. Plus some other special
      cases.
      
      After this patch, the regression tests generate all different WAL record
      types. Not all branches within the redo functions are covered, but it's a
      step forward.
      88fc7192
    • Robert Haas's avatar
      Avoid file descriptor leak in pg_test_fsync. · a0165553
      Robert Haas authored
      This can cause problems on Windows, where files that are still open
      can't be unlinked.
      
      Jeff Janes
      a0165553
    • Fujii Masao's avatar
      Fix bug in the test of file descriptor of current WAL file in pg_receivexlog. · d5f4df72
      Fujii Masao authored
      In pg_receivexlog, in order to check whether the current WAL file is
      being opened or not, its file descriptor has to be checked against -1
      as an invalid value. But, oops, 7900e94 added the incorrect test
      checking the descriptor against 1. This commit fixes that bug.
      
      Back-patch to 9.4 where the bug was added.
      
      Spotted by Magnus Hagander
      d5f4df72
    • Fujii Masao's avatar
      Fix pg_receivexlog --slot so that it doesn't prevent the server shutdown. · f66c20b3
      Fujii Masao authored
      When pg_receivexlog --slot is connecting to the server, at the shutdown
      of the server, walsender keeps waiting for the last WAL record to be
      replicated and flushed in pg_receivexlog. But previously pg_receivexlog
      issued sync command only when WAL file was switched. So there was
      the case where the last WAL was never flushed and walsender had to
      keep waiting infinitely. This caused the server shutdown to get stuck.
      
      pg_recvlogical handles this problem by calling fsync() when it receives
      the request of immediate reply from the server. That is, at shutdown,
      walsender sends the request, pg_recvlogical receives it, flushes the last
      WAL record, and sends the flush location back to the server. Since
      walsender can see that the last WAL record is successfully flushed, it can
      exit cleanly.
      
      This commit introduces the same logic as pg_recvlogical has,
      to pg_receivexlog.
      
      Back-patch to 9.4 where pg_receivexlog was changed so that it can use
      the replication slot.
      
      Original patch by Michael Paquier, rewritten by me.
      Bug report by Furuya Osamu.
      f66c20b3
    • Tom Lane's avatar
      Don't require bleeding-edge timezone data in timestamptz regression test. · 8d7af8fb
      Tom Lane authored
      The regression test cases added in commits b2cbced9 et al depended in part
      on the Russian timezone offset changes of Oct 2014.  While this is of no
      particular concern for a default Postgres build, it was possible for a
      build using --with-system-tzdata to fail the tests if the system tzdata
      database wasn't au courant.  Bjorn Munch and Christoph Berg both complained
      about this while packaging 9.4rc1, so we probably shouldn't insist on the
      system tzdata being up-to-date.  Instead, make an equivalent test using a
      zone change that occurred in Venezuela in 2007.  With this patch, the
      regression tests should pass using any tzdata set from 2012 or later.
      (I can't muster much sympathy for somebody using --with-system-tzdata
      on a machine whose system tzdata is more than three years out-of-date.)
      8d7af8fb
  8. 18 Nov, 2014 2 commits
    • Tom Lane's avatar
      Update comments in find_typedef. · 7aa8d9e5
      Tom Lane authored
      These comments don't seem to have been touched in a long time.  Make them
      describe the current implementation rather than what was here last century,
      and be a bit more explicit about the unreferenced-typedefs issue.
      7aa8d9e5
    • Tom Lane's avatar
      Fix some bogus direct uses of realloc(). · 8b13e5c6
      Tom Lane authored
      pg_dump/parallel.c was using realloc() directly with no error check.
      While the odds of an actual failure here seem pretty low, Coverity
      complains about it, so fix by using pg_realloc() instead.
      
      While looking for other instances, I noticed a couple of places in
      psql that hadn't gotten the memo about the availability of pg_realloc.
      These aren't bugs, since they did have error checks, but verbosely
      inconsistent code is not a good thing.
      
      Back-patch as far as 9.3.  9.2 did not have pg_dump/parallel.c, nor
      did it have pg_realloc available in all frontend code.
      8b13e5c6