国外数据包装器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 将通过允许您将扩展列表附加到外部服务器对象来解决此问题。
我正在通过 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 viewelement_types
), elseUSER-DEFINED
(in that case, the type is identified inudt_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 将通过允许您将扩展列表附加到外部服务器对象来解决此问题。