2011-03-13 251 views
0

我想在我的Postgres數據庫中爲枚舉類型添加一個新值,但該類型已被各個字段使用。由於該類型已被使用,Postgres不會讓我這樣做。在Postgres中添加枚舉類型

以前我已經做到了這一點:

  1. 使用類型 到一個臨時varchar字段複製所有領域,
  2. 刪除所有領域,並使用 型功能,
  3. 刪除
  4. 創建一個新的類型與額外 枚舉值,
  5. 設置全部 臨時字段和函數返回使用枚舉類型 。

在任何情況下都是一份很棒的工作,但如果在整個數據庫中使用表格,視圖和功能的類型數十次,這是一項不可能完成的重大任務。當然,爲了僅爲枚舉類型添加一個新值,肯定有一個更簡單的方法?

非常感謝您的幫助。

+0

這可能不是您想要聽到的答案:但這是您爲非標準化設計付出的代價。將你的枚舉值移到一個單獨的表中併爲其創建一個外鍵。添加一個新值就像向表中添加新行一樣簡單。 – 2011-03-13 23:06:39

回答

1

@a_horse_with_no_name覆蓋,以解決這一問題的最佳方式。如果一個完整的重新架構不適合您的想法,您可以利用PostgreSQL對DDL和DML操作中的事務的支持。

因此,您理論上可以在單個事務操作中執行所有五個步驟。由於MVCC,您將能夠安全地進行此更改並對數據庫用戶產生最小的功能影響。您可能會承擔巨大的磁盤開銷(取決於表的大小)和實質性數據庫膨脹(如果事務需要很長時間,真空過程將不會運行)。

所有這些被說,這是完全可行的。