Skip to content
Snippets Groups Projects
  1. Jul 14, 2014
  2. Jul 10, 2014
    • Tom Lane's avatar
      Implement IMPORT FOREIGN SCHEMA. · 59efda3e
      Tom Lane authored
      This command provides an automated way to create foreign table definitions
      that match remote tables, thereby reducing tedium and chances for error.
      In this patch, we provide the necessary core-server infrastructure and
      implement the feature fully in the postgres_fdw foreign-data wrapper.
      Other wrappers will throw a "feature not supported" error until/unless
      they are updated.
      
      Ronan Dunklau and Michael Paquier, additional work by me
      59efda3e
    • Bruce Momjian's avatar
      Adjust blank lines around PG_MODULE_MAGIC defines, for consistency · 6a605cd6
      Bruce Momjian authored
      Report by Robert Haas
      6a605cd6
  3. May 06, 2014
    • Bruce Momjian's avatar
      pgindent run for 9.4 · 0a783200
      Bruce Momjian authored
      This includes removing tabs after periods in C comments, which was
      applied to back branches, so this change should not effect backpatching.
      0a783200
  4. Apr 18, 2014
    • Peter Eisentraut's avatar
      Create function prototype as part of PG_FUNCTION_INFO_V1 macro · e7128e8d
      Peter Eisentraut authored
      Because of gcc -Wmissing-prototypes, all functions in dynamically
      loadable modules must have a separate prototype declaration.  This is
      meant to detect global functions that are not declared in header files,
      but in cases where the function is called via dfmgr, this is redundant.
      Besides filling up space with boilerplate, this is a frequent source of
      compiler warnings in extension modules.
      
      We can fix that by creating the function prototype as part of the
      PG_FUNCTION_INFO_V1 macro, which such modules have to use anyway.  That
      makes the code of modules cleaner, because there is one less place where
      the entry points have to be listed, and creates an additional check that
      functions have the right prototype.
      
      Remove now redundant prototypes from contrib and other modules.
      e7128e8d
  5. Mar 23, 2014
    • Noah Misch's avatar
      Offer triggers on foreign tables. · 7cbe57c3
      Noah Misch authored
      This covers all the SQL-standard trigger types supported for regular
      tables; it does not cover constraint triggers.  The approach for
      acquiring the old row mirrors that for view INSTEAD OF triggers.  For
      AFTER ROW triggers, we spool the foreign tuples to a tuplestore.
      
      This changes the FDW API contract; when deciding which columns to
      populate in the slot returned from data modification callbacks, writable
      FDWs will need to check for AFTER ROW triggers in addition to checking
      for a RETURNING clause.
      
      In support of the feature addition, refactor the TriggerFlags bits and
      the assembly of old tuples in ModifyTable.
      
      Ronan Dunklau, reviewed by KaiGai Kohei; some additional hacking by me.
      7cbe57c3
  6. Mar 07, 2014
    • Tom Lane's avatar
      Fix contrib/postgres_fdw to handle multiple join conditions properly. · 83204e10
      Tom Lane authored
      The previous coding supposed that it could consider just a single join
      condition in any one parameterized path for the foreign table.  But in
      reality, the parameterized-path machinery forces all join clauses that are
      "movable to" the foreign table to be evaluated at that node; including
      clauses that we might not consider safe to send across.  Such cases would
      result in an Assert failure in an assert-enabled build, and otherwise in
      sending an unsafe clause to the foreign server, which might result in
      errors or silently-wrong answers.  A lesser problem was that the
      cost/rowcount estimates generated for the parameterized path failed to
      account for any additional join quals that get assigned to the scan.
      
      To fix, rewrite postgresGetForeignPaths so that it correctly collects all
      the movable quals for any one outer relation when generating parameterized
      paths; we'll now generate just one path per outer relation not one per join
      qual.  Also fix bogus assumptions in postgresGetForeignPlan and
      estimate_path_cost_size that only safe-to-send join quals will be
      presented.
      
      Based on complaint from Etsuro Fujita that the path costs were being
      miscalculated, though this is significantly different from his proposed
      patch.
      83204e10
  7. Feb 04, 2014
    • Tom Lane's avatar
      Improve connection-failure error handling in contrib/postgres_fdw. · 00d4f2af
      Tom Lane authored
      postgres_fdw tended to say "unknown error" if it tried to execute a command
      on an already-dead connection, because some paths in libpq just return a
      null PGresult for such cases.  Out-of-memory might result in that, too.
      To fix, pass the PGconn to pgfdw_report_error, and look at its
      PQerrorMessage() string if we can't get anything out of the PGresult.
      
      Also, fix the transaction-exit logic to reliably drop a dead connection.
      It was attempting to do that already, but it assumed that only connection
      cache entries with xact_depth > 0 needed to be examined.  The folly in that
      is that if we fail while issuing START TRANSACTION, we'll not have bumped
      xact_depth.  (At least for the case I was testing, this fix masks the
      other problem; but it still seems like a good idea to have the PGconn
      fallback logic.)
      
      Per investigation of bug #9087 from Craig Lucas.  Backpatch to 9.3 where
      this code was introduced.
      00d4f2af
  8. Jan 07, 2014
  9. Jan 04, 2014
    • Tom Lane's avatar
      Fix typo in comment. · 99299756
      Tom Lane authored
      classifyClauses was renamed to classifyConditions somewhere along the
      line, but this comment didn't get the memo.
      
      Ian Barwick
      99299756
  10. Oct 31, 2013
  11. Aug 18, 2013
    • Tom Lane's avatar
      Fix planner problems with LATERAL references in PlaceHolderVars. · 9e7e29c7
      Tom Lane authored
      The planner largely failed to consider the possibility that a
      PlaceHolderVar's expression might contain a lateral reference to a Var
      coming from somewhere outside the PHV's syntactic scope.  We had a previous
      report of a problem in this area, which I tried to fix in a quick-hack way
      in commit 4da6439b, but Antonin Houska
      pointed out that there were still some problems, and investigation turned
      up other issues.  This patch largely reverts that commit in favor of a more
      thoroughly thought-through solution.  The new theory is that a PHV's
      ph_eval_at level cannot be higher than its original syntactic level.  If it
      contains lateral references, those don't change the ph_eval_at level, but
      rather they create a lateral-reference requirement for the ph_eval_at join
      relation.  The code in joinpath.c needs to handle that.
      
      Another issue is that createplan.c wasn't handling nested PlaceHolderVars
      properly.
      
      In passing, push knowledge of lateral-reference checks for join clauses
      into join_clause_is_movable_to.  This is mainly so that FDWs don't need
      to deal with it.
      
      This patch doesn't fix the original join-qual-placement problem reported by
      Jeremy Evans (and indeed, one of the new regression test cases shows the
      wrong answer because of that).  But the PlaceHolderVar problems need to be
      fixed before that issue can be addressed, so committing this separately
      seems reasonable.
      9e7e29c7
  12. Jun 12, 2013
    • Tom Lane's avatar
      Improve updatability checking for views and foreign tables. · dc3eb563
      Tom Lane authored
      Extend the FDW API (which we already changed for 9.3) so that an FDW can
      report whether specific foreign tables are insertable/updatable/deletable.
      The default assumption continues to be that they're updatable if the
      relevant executor callback function is supplied by the FDW, but finer
      granularity is now possible.  As a test case, add an "updatable" option to
      contrib/postgres_fdw.
      
      This patch also fixes the information_schema views, which previously did
      not think that foreign tables were ever updatable, and fixes
      view_is_auto_updatable() so that a view on a foreign table can be
      auto-updatable.
      
      initdb forced due to changes in information_schema views and the functions
      they rely on.  This is a bit unfortunate to do post-beta1, but if we don't
      change this now then we'll have another API break for FDWs when we do
      change it.
      
      Dean Rasheed, somewhat editorialized on by Tom Lane
      dc3eb563
  13. May 29, 2013
  14. Mar 22, 2013
    • Tom Lane's avatar
      Document cross-version compatibility issues for contrib/postgres_fdw. · 5b86fedf
      Tom Lane authored
      One of the use-cases for postgres_fdw is extracting data from older PG
      servers, so cross-version compatibility is important.  Document what we
      can do here, and further annotate some of the coding choices that create
      compatibility constraints.  In passing, remove one unnecessary
      incompatibility with old servers, namely assuming that we didn't need to
      quote the timezone name 'UTC'.
      5b86fedf
    • Tom Lane's avatar
      Avoid retrieving dummy NULL columns in postgres_fdw. · e690b951
      Tom Lane authored
      This should provide some marginal overall savings, since it surely takes
      many more cycles for the remote server to deal with the NULL columns than
      it takes for postgres_fdw not to emit them.  But really the reason is to
      keep the emitted queries from looking quite so silly ...
      e690b951
    • Tom Lane's avatar
      Redo postgres_fdw's planner code so it can handle parameterized paths. · 9cbc4b80
      Tom Lane authored
      I wasn't going to ship this without having at least some example of how
      to do that.  This version isn't terribly bright; in particular it won't
      consider any combinations of multiple join clauses.  Given the cost of
      executing a remote EXPLAIN, I'm not sure we want to be very aggressive
      about doing that, anyway.
      
      In support of this, refactor generate_implied_equalities_for_indexcol
      so that it can be used to extract equivalence clauses that aren't
      necessarily tied to an index.
      9cbc4b80
  15. Mar 12, 2013
    • Tom Lane's avatar
      Fix contrib/postgres_fdw's handling of column defaults. · 50c19fc7
      Tom Lane authored
      Adopt the position that only locally-defined defaults matter.  Any defaults
      defined in the remote database do not affect insertions performed through
      a foreign table (unless they are for columns not known to the foreign
      table).  While it'd arguably be more useful to permit remote defaults to be
      used, making that work in a consistent fashion requires far more work than
      seems possible for 9.3.
      50c19fc7
    • Tom Lane's avatar
      Fix postgres_fdw's issues with inconsistent interpretation of data values. · cc3f281f
      Tom Lane authored
      For datatypes whose output formatting depends on one or more GUC settings,
      we have to worry about whether the other server will interpret the value
      the same way it was meant.  pg_dump has been aware of this hazard for a
      long time, but postgres_fdw needs to deal with it too.  To fix data
      retrieval from the remote server, set the necessary remote GUC settings at
      connection startup.  (We were already assuming that settings made then
      would persist throughout the remote session.)  To fix data transmission to
      the remote server, temporarily force the relevant GUCs to the right values
      when we're about to convert any data values to text for transmission.
      
      This is all pretty grotty, and not very cheap either.  It's tempting to
      think of defining one uber-GUC that would override any settings that might
      render printed data values unportable.  But of course, older remote servers
      wouldn't know any such thing and would still need this logic.
      
      While at it, revert commit f7951eef, since
      this provides a real fix.  (The timestamptz given in the error message
      returned from the "remote" server will now reliably be shown in UTC.)
      cc3f281f
  16. Mar 10, 2013
    • Tom Lane's avatar
      Support writable foreign tables. · 21734d2f
      Tom Lane authored
      This patch adds the core-system infrastructure needed to support updates
      on foreign tables, and extends contrib/postgres_fdw to allow updates
      against remote Postgres servers.  There's still a great deal of room for
      improvement in optimization of remote updates, but at least there's basic
      functionality there now.
      
      KaiGai Kohei, reviewed by Alexander Korotkov and Laurenz Albe, and rather
      heavily revised by Tom Lane.
      21734d2f
  17. Feb 23, 2013
  18. Feb 22, 2013
    • Tom Lane's avatar
      Fix some planning oversights in postgres_fdw. · c0c6acdf
      Tom Lane authored
      Include eval costs of local conditions in remote-estimate mode, and don't
      assume the remote eval cost is zero in local-estimate mode.  (The best
      we can do with that at the moment is to assume a seqscan, which may well
      be wildly pessimistic ... but zero won't do at all.)
      
      To get a reasonable local estimate, we need to know the relpages count
      for the remote rel, so improve the ANALYZE code to fetch that rather
      than just setting the foreign table's relpages field to zero.
      c0c6acdf
    • Tom Lane's avatar
      Get rid of postgres_fdw's assumption that remote type OIDs match ours. · 5fd386bb
      Tom Lane authored
      The only place we depended on that was in sending numeric type OIDs in
      PQexecParams; but we can replace that usage with explicitly casting
      each Param symbol in the query string, so that the types are specified
      to the remote by name not OID.  This makes no immediate difference but
      will be essential if we ever hope to support use of non-builtin types.
      5fd386bb
  19. Feb 21, 2013
    • Tom Lane's avatar
      Add postgres_fdw contrib module. · d0d75c40
      Tom Lane authored
      There's still a lot of room for improvement, but it basically works,
      and we need this to be present before we can do anything much with the
      writable-foreign-tables patch.  So let's commit it and get on with testing.
      
      Shigeru Hanada, reviewed by KaiGai Kohei and Tom Lane
      d0d75c40
Loading