1

tds_fdw在 MS SQL Server 和 PostgreSQL 之间使用过。

我在 PostgreSql 中创建了一个外部服务器和外部表。当我从外部表中选择数据时,它也会运行 Mssql?还是 PostgreSQL 中的数据存储?

4

2 回答 2

1

外部数据包装器只是查询远程数据的另一种方式。如果您创建外部表,则访问该表的任何 SELECT 都将转发到外部服务器(在您的情况下为 SQL Server)。

所以数据存储在 SQL Server 中。

当您从外部表中选择时,外部数据包装器会将 SELECT 语句发送到 SQL Server。然后 SQL Server 将处理查询并将数据发送回 Postgres 服务器。然后,外部数据包装器将数据返回给您的应用程序(连接到您的 Postgres 服务器)。FDW 可以将一些操作“推送”到外部服务器,这样 Postgres 就不需要处理它们了。我不知道 tds_fdw 实现的细节,但是像WHERE子句这样的东西通常会被推送到远程服务器,以便在 Postgres 端只处理相关数据。

从 MS SQL Server 的角度来看,FDW 只是另一个发送 SQL 查询的客户端。

当 MS SQL Server 正在处理请求时,Postgres(或更准确地说:为您的 Postgres 连接创建的后端)处于空闲状态(什么都不做)并等待 MS SQL Server 完成处理。

于 2018-10-01T14:24:32.357 回答
0

当您从外部表中选择时,查询将在 SQL 服务器中执行。但基于此问题:https ://github.com/tds-fdw/tds_fdw/issues/154 您必须在外表选项中将 row_estimate_method设置为“showplan_all”。否则,查询将在 SQL 服务器中运行两次。

示例:我想使用 postgres 外部表在 SQL 服务器中创建表:

DROP FOREIGN TABLE IF EXISTS ft_create_table;
CREATE FOREIGN TABLE ft_create_table()
SERVER sql_server
OPTIONS (row_estimate_method 'showplan_all' ,query 'CREATE TABLE [test](
    [Id] [bigint] NOT NULL);';

SELECT * FROM ft_create_table;
于 2020-10-15T15:54:15.237 回答