Postgres-DBLINK-工作原理?

问题描述 投票:0回答:1

我有一个DBlink,它对远程数据库中的特定表执行选择。由于此远程表非常大,因此我需要进行过滤(使用where)以将很少的行带入本地数据库。本地数据库和远程数据库之间的连接是通过4G数据链路建立的,该链路具有每月数据流量限制。我一直在消耗大量数据,却不明白为什么。

昨天我决定做一个测试。我在远程数据库中仅使用必要的数据创建了一个View(已经应用了以前在DBLink中应用的位置)。我通过DbLink重新编写了查询,这一次指向远程View,没有任何位置。

结果是减少了数据消耗。

它给人的印象是,通过Dblink进行选择会在远程表上执行select *,带走所有数据,然后将其应用于本地数据库中的where,从而导致消耗过多。当我在视图中分割数据时,这种情况不再发生。有人对此案件有任何解释吗?

下面是我执行的选择:

SELECT *
FROM dblink('cloud',
                        select  field1,
                                field2,
                                field3
                        from    my_table
                        where   field1  = 2 
                        order by    field1
                        limit 50    
            )
            AS rep( field1  int4,
                    field2  int4,
                    field3  int4
            );

我做的另一项测试是对远程表中的数据进行备份,并删除大多数数据,仅保留DBlink中使用的数据。消耗量也再次下降,证实了我的理论,即Postgres带来所有数据并且仅对本地数据库执行过滤。

postgresql view dblink
1个回答
0
投票

dblink只是将查询传递给另一端。它当然不会删除WHERE或LIMIT。我不知道实际发生了什么,但是您在这里提出的理论无法解释它。

为了验证我的断言,您可以在外部设置log_statement ='all'并观察实际正在运行的查询。

© www.soinside.com 2019 - 2024. All rights reserved.