在Postgres中添加枚举类型

时间:2011-03-13 22:16:44

标签: postgresql

我正在尝试在Postgres数据库中为枚举类型添加新值,但该类型已被各种字段使用。 Postgres不允许我这样做,因为该类型已经在使用中。

之前我通过以下方式完成了这项工作:

  1. 使用该类型复制所有字段 到临时varchar字段,
  2. 使用删除所有字段和函数 型,
  3. 删除类型,
  4. 使用extra创建一个新类型 枚举值,
  5. 全部设定 临时字段和函数回来使用 枚举类型。
  6. 在任何情况下都是一项重要工作,但如果在表格,视图和函数中数据库中使用了数十次类型,这是一项不可能完成的大任务。当然,只需添加一个新值到枚举类型就可以有更简单的方法吗?

    非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

@a_horse_with_no_name涵盖了解决此问题的最佳方法。如果完整的重新架构不适合您的想象,您可以利用PostgreSQL对DDL和DML操作中的事务的支持。

理论上,您可以在单个事务操作中执行所有五个步骤。由于MVCC,您将能够安全地进行此更改,并对数据库用户产生最小的功能影响。您可能会产生巨大的磁盘开销(取决于表的大小)和大量的数据库膨胀(如果事务需要很长时间,真空过程将不会运行)。

所有这些都说,这是完全可行的。

答案 1 :(得分:0)

新的9.1版本将有一个简单的方法: http://developer.postgresql.org/pgdocs/postgres/sql-altertype.html