2016-06-09 66 views
1

我正在通過fdw_postgres訪問來自不同數據庫的數據。它運作良好:外來數據包裝器fdw_postgres可以處理PostGIS的GEOMETRY數據類型嗎?

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在這種情況下意味着什麼?

回答

2

documentationdata_type柱:柱的

數據類型,如果是內置型,或ARRAY如果是 一些陣列(在這種情況下,請參閱圖element_types ),否則 USER-DEFINED(在這種情況下,類型在udt_name和 關聯列中標識)。

所以這不是特定於FDW的;你會看到物理表的相同定義。

postgres_fdw可以處理數據類型有就好了,但目前one caveat:如果您查詢的外部表與涉及用戶定義類型WHERE條件,也不會推這種狀況到國外的服務器。

換句話說,如果你的WHERE子句只引用內置類型,例如:

SELECT * 
FROM fdw_table 
WHERE name = $1 

...那麼WHERE條款將被髮送到國外的服務器,只有匹配的行會檢索。但是,當涉及用戶定義類型時,例如:

SELECT * 
FROM fdw_table 
WHERE geom = $1 

...然後從外部服務器檢索整個表,並在本地執行過濾。

Postgres 9.6將解決此問題,方法是允許您將擴展名列表附加到您的外部服務器對象。

+0

感謝您的詳細解釋! – andrasz

0

那麼,很明顯,你將需要任何非標準類型定義在兩個結束。不要忘記FDW功能應該支持各種不同的數據庫平臺,所以沒有任何神奇的方式來導入數據類型的遠程操作。實際上,考慮到一端可能在MS-Windows上運行,另一端可能在基於ARM的Linux上運行,所以即使使用PostgreSQL也沒有明智的做法。

相關問題