Harada-san,

I checked your patch, and had an impression that includes many
improvements from the previous revision that I looked at the last
commit fest.

However, I noticed several points to be revised, or investigated.

* It seems to me expected results of the regression test is not
  attached, even though test cases were included. Please add it.

* cleanup_connection() does not close the connection in case
  when this callback was invoked due to an error under sub-
  transaction. It probably makes problematic behavior.

  See the following steps to reproduce the matter:

postgres=# BEGIN;
BEGIN
postgres=# SELECT * FROM ft3;
 a |  b
---+-----
 1 | aaa
 2 | bbb
 3 | ccc
 4 | ddd
 5 | eee
 6 | fff
(6 rows)

postgres=# SAVEPOINT sv_01;
SAVEPOINT

postgres=# SELECT * FROM ft3 WHERE 1 / (a - 4) > 0;  -- should be
error on remote transaction
ERROR:  could not execute remote query
DETAIL:  ERROR:  division by zero

HINT:  SELECT a, b FROM public.t1 WHERE (((1 OPERATOR(pg_catalog./) (a
OPERATOR(pg_catalog.-) 4)) OPERATOR(pg_catalog.>) 0))

postgres=# ROLLBACK TO SAVEPOINT sv_01;
ROLLBACK

postgres=# SELECT * FROM ft3;
ERROR:  could not execute EXPLAIN for cost estimation
DETAIL:  ERROR:  current transaction is aborted, commands ignored
until end of transaction block

HINT:  SELECT a, b FROM public.t1

  Once we got an error under the remote transaction, it eventually raises
  an error on local side, then cleanup_connection() should be invoked.
  But it ignores the error due to sub-transaction, thus, the remote transaction
  being already aborted is kept.
  I'd like to suggest two remedy.
  1. connections are closed, even if errors on sub-transaction.
  2. close the connection if PQexecParams() returns an error,
      on execute_query() prior to raise a local error.

  * Regarding to deparseSimpleSql(), it pulls attributes being referenced
    from baserestrictinfo and reltargetlist using pull_var_clause().
    Is it unavailable to use local_conds instead of baserestrictinfo?
    We can optimize references to the variable being consumed at the
    remote side only. All we need to transfer is variables referenced
    in targetlist and local-clauses.
    In addition, is pull_var_clause() reasonable to list up all the attribute
    referenced at the both expression tree? It seems to be pull_varattnos()
    is more useful API in this situation.

  * Regarding to deparseRelation(), it scans simple_rte_array to fetch
    RangeTblEntry with relation-id of the target foreign table.
    It does not match correct entry if same foreign table is appeared in
    this list twice or more, like a case of self-join. I'd like to recommend
    to use simple_rte_array[baserel->relid] instead.
    In addition, it checks whether relkind is RELKIND_FOREIGN_TABLE,
    or not. It seems to me this check should be Assert(), if routines of
    pgsql_fdw is called towards regular relations.

  * Regarding to deparseVar(), is it unnecessary to check relkind of
    the relation being referenced by Var node, isn't it?

  * Regarding to deparseBoolExpr(), compiler raised a warning
    because op can be used without initialized.

  * Even though it is harmless, sortConditions() is a misleading function
    name. How about categolizeConditions() or screeningConditions()?

Thanks for your great jobs.

2012/6/14 Shigeru HANADA <shigeru.han...@gmail.com>:
> I'd like to propose pgsql_fdw, FDW for PostgreSQL, as a contrib module
> in core, again.  This patch is basically rebased version of the patches
> proposed in 9.2 development cycle, and contains some additional changes
> such as concern about volatile variables for PG_CATCH blocks.  In
> addition, I combined old three patches (pgsql_fdw core functionality,
> push-down support, and analyze support) into one patch for ease of
> review. (I think these features are necessary for pgsql_fdw use.)
>
> After the development for 9.2 cycle, pgsql_fdw can gather statistics
> from remote side by providing sampling function to analyze module in
> backend core, use them to estimate selectivity of WHERE clauses which
> will be pushed-down, and retrieve query results from remote side with
> custom row processor which prevents memory exhaustion from huge result set.
>
> It would be possible to add some more features, such as ORDER BY
> push-down with index information support, without changing existing
> APIs, but at first add relatively simple pgsql_fdw and enhance it seems
> better.  In addition, once pgsql_fdw has been merged, it would help
> implementing proof-of-concept of SQL/MED-related features.
>
> Regards,
> --
> Shigeru HANADA
>
>
> --
> Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-hackers
>



-- 
KaiGai Kohei <kai...@kaigai.gr.jp>

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to