ページの先頭行へ戻る
Enterprise Postgres 17 リリース情報

2.8.7 外部テーブルの外部結合をOracleにプッシュダウンするように変更

非互換

FUJITSU Enterprise Postgres 11では、外部テーブルの外部結合時において、PostgreSQL側からOracle側へプッシュダウンするよう変更します。

FUJITSU Enterprise Postgres 10以前の場合

Oracle query側では各外部テーブルの抽出のみ実施し、外部結合はPostgreSQL側で実施します。

[例]

=# EXPLAIN SELECT a.c1, a.c2, b.c3 FROM ft1 a LEFT OUTER JOIN ft2 b ON a.c1 = b.c1 AND substr(a.c2, -1,1) = 'd';
              QUERY PLAN
-----------------------------------------------------------------------------------------------------
 Hash Left Join  (cost=30012.50..40215.00 rows=1000 width=66)
   Hash Cond: (a.c1 = b.c1)
   Join Filter: (substr((a.c2)::text, '-1'::integer, 1) = 'd'::text)
   ->  Foreign Scan on ft1 a  (cost=10000.00..20000.00 rows=1000 width=62)
         Oracle query: SELECT /*7543493300debf649a78c5dbe11c9be4*/ r1."C1", r1."C2" FROM "T1" r1
   ->  Hash  (cost=20000.00..20000.00 rows=1000 width=8)
         ->  Foreign Scan on ft2 b  (cost=10000.00..20000.00 rows=1000 width=8)
               Oracle query: SELECT /*afb5375733f8fc53a93d0df585c01b9f*/ r2."C1", r2."C3" FROM "T2" r2
(8 行)
=# SELECT a.c1, a.c2, b.c3 FROM ft1 a LEFT OUTER join ft2 b ON a.c1 = b.c1 AND substr(a.c2, -1,1) = 'd';
 c1 |  c2  | c3
----+------+----
  1 | abcd |
  2 | efgh |
  3 | ijkl |
(3 行)
FUJITSU Enterprise Postgres 11の場合

Oracle query側で外部結合と抽出を実施します。

[例]

=# EXPLAIN SELECT a.c1, a.c2, b.c3 FROM ft1 a LEFT OUTER JOIN ft2 b ON a.c1 = b.c1 AND substr(a.c2, -1,1) = 'd';
               QUERY PLAN
-----------------------------------------------------------------------------------------------------
 Foreign Scan  (cost=10000.00..20000.00 rows=1000 width=66)
   Oracle query: SELECT /*5e03719c069bac004e84a38149e37775*/ r1."C1", r1."C2", r2."C3" FROM ("T1" r1 LEFT JOIN "T2" r2 ON (substr(r1."C2", -1, 1) = 'd') AND (r1."C1" = r2."C1"))
(2 行)
=# SELECT a.c1, a.c2, b.c3 FROM ft1 a LEFT OUTER JOIN ft2 b ON a.c1 = b.c1 AND substr(a.c2, -1,1) = 'd';
 c1 |  c2  |  c3
----+------+------
  1 | abcd | 1000
  2 | efgh |
  3 | ijkl |
(3 行)

対処方法

Oracleにプッシュダウンさせない場合、プッシュダウンさせない箇所の処理に共通テーブル式を使用して記述してください。