我正在尝试构建一个脚本系统来维护 Oracle DB 和 Postgres DB 之间的持续关系。在一个特别大的表(50B 行)上,where 子句 postgres 端的效率显然对于同步至关重要。但是,我发现我在 oracle_fdw 中的选项非常有限,因为 postgres WHERE 子句中的内容实际上转移到了 Oracle 端。在这种情况下...比较运算符。
例如,在我执行此操作时,在 postgres 端
explain
SELECT
order_number
FROM
orders
WHERE
order_number > '12345'
我得到:
Foreign Scan on orders (cost=10000.00..35675241480.00 rows=3567523148 width=9)
Filter: ((order_number)::text > '12345'::text)
Oracle
query: SELECT /*0aacedb54006ca3542bcd999c312e859*/ r1."ORDER_NUMBER"
FROM "ORDERS" r1
(3 rows)
这表明比较没有到达 Oracle,而是在本地进行过滤之前尝试下载全表。没有布埃诺。
理想情况下,我希望 BETWEEN 条件能够向上翻译。
SELECT
order_number
FROM
orders
WHERE
order_number between '12345' and '67890'
我一直在考虑的唯一选择是使用硬编码的查询创建一个外部表。唯一的问题是该表仍将返回大量行,而且我无法一次获取和增加批次。我的查询意图是一次只传输大约 10,000 个,因为这接近 fdw 预取限制。它也是我最想在签到之间转移以查看进展情况。
如果有一种方法可以将外部表作为具有可变字段的远程查询,那会很方便吗?