国外数据包装器fdw_postgres 可以处理PostGIS 的GEOMETRY 数据类型吗?

Can the foreign data wrapper fdw_postgres handle the GEOMETRY data type of 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的GEOMETRY数据类型吗? USER-DEFINED 在这种情况下是什么意思?

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

来自 data_type 列的 documentation

Data type of the column, if it is a built-in type, or ARRAY if it is some array (in that case, see the view element_types), else USER-DEFINED (in that case, the type is identified in udt_name and associated columns).

所以这不是外籍家政工人特有的;您会看到物理 table.

的相同定义

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

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

SELECT *
FROM fdw_table
WHERE name = 

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

SELECT *
FROM fdw_table
WHERE geom = 

...然后整个table从国外服务器取回,在本地进行过滤

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