2015-05-19 22 views
0

我在database_a中創建了一個外部表(foo_table)。 foo_table住在database_b中。 foo_table具有enum(bar_type)作爲其列之一。由於此枚舉位於database_b中,因此在database_a中創建外部表失敗。 database_a不理解列類型。跑在database_aSQL:創建具有枚舉列的外部表時出錯

CREATE FOREIGN TABLE foo_table (id integer NOT NULL, bar bar_type) SERVER database_b

以下其中一個獲得誤差:

ERROR: type "bar_type" does not exist

我可以創造的database_a bar_type副本,但這種感覺重複和可能不一致的未來事業。任何人都會有關於處理最佳實踐的想法嗎?

回答

1

我總結我從的pgsql-general郵件列表收到了答案:

  1. 外國表基本上是本地數據庫的ad-hoc遠程數據源,所以責任是本地數據庫上保持其遠程表的定義,無論它是在另一個(甚至是相同的)PostgreSQL服務器還是一個完全不同的數據源,特別是因爲本地定義可能與遠程定義不同。
  2. 這確實意味着沒有簡單的方法來確保本地服務器上存在任何遠程依賴關係。 PostgreSQL 9.5將提供IMPORT FOREIGN SCHEMA命令,但是這僅限於表/視圖定義。
  3. 如果enum的定義變得不一致,我們希望在檢索具有本地端未知值的行時發生錯誤。
  4. 一個可能的解決方法是將外部表的列聲明爲「文本」而不​​是枚舉;你會在本地丟失一些錯誤檢查,但是隻要你存儲了一些東西,遠程服務器就會強制執行有效性。
  5. 但是,不清楚此黑客是否會在枚舉列的WHERE條件下行爲合意。我將檢查WHERE條件的性能,並在更多詳細信息時更新此答案。

所有功勞歸於pgsql-general郵件列表上的優秀人士。