外部数据包装器fdw_postgres能否处理PostGIS的几何数据类型



我正在通过fdw_postgres访问来自不同数据库的数据。它运行良好:

CREATE FOREIGN TABLE fdw_table 
(
name TEXT,
area double precision,
use TEXT,
geom GEOMETRY
)
SERVER foreign_db 
OPTIONS (schema_name 'schema_A', table_name 'table_B')

然而,当我查询fdw_table的data_type时,我得到以下结果: name text area double precision use text geom USER-DEFINED

fdw_postgres是否可以不处理PostGIS的几何数据类型?在这种情况下,USER-DEFINED是什么意思?

来自data_type列上的文档:

列的数据类型(如果是内置类型),或ARRAY(如果是)某个数组(在这种情况下,请参见视图element_types),否则USER-DEFINED(在这种情况下,类型在udt_name和关联列)。

所以这不是FDW特有的;对于物理表,您会看到相同的定义。

postgres_fdw可以很好地处理自定义数据类型,但目前有一点需要注意:如果使用涉及用户定义类型的WHERE条件查询外部表,它不会将此条件推送到外部服务器。

换句话说,如果您的WHERE子句只引用内置类型,例如:

SELECT *
FROM fdw_table
WHERE name = $1

WHERE子句将被发送到外部服务器,并且仅检索匹配的行。但当涉及用户定义的类型时,例如:

SELECT *
FROM fdw_table
WHERE geom = $1

然后从外部服务器检索整个表,并在本地执行筛选。

Postgres9.6将通过允许您将扩展列表附加到外部服务器对象来解决此问题。

很明显,您需要在两端定义任何非标准类型。不要忘记,FDW功能应该支持各种不同的数据库平台,因此没有任何神奇的方法可以导入数据类型上的远程操作。事实上,考虑到一端可以在MS Windows上运行,另一端可以在基于ARM的Linux上运行,甚至没有一种明智的方法可以只使用PostgreSQL来实现这一点。

相关内容

  • 没有找到相关文章

最新更新