改变域类型

时间:2012-02-18 02:34:00

标签: postgresql postgresql-9.1

我的域名类型为varchar(35),并希望将长度增加到40。

我可以创建一个新域,只需执行ALTER TABLE表ALTER COLUMN列TYPE new_domain;

但是,我必须对使用该域的所有表执行此操作。无论如何使用ALTER DOMAIN语法来增加长度/更改数据类型?

1 个答案:

答案 0 :(得分:3)

优越的设计是使data type text列允许无限长的文本。如果您确实需要强制执行最大长度,请添加CHECK约束,如下所示:

ALTER TABLE tbl ADD CONSTRAINT tbl_col_len CHECK (length(col) < 41);

您可以自由更改检查约束,而不必弄乱列或其数据类型。

域名也是如此。如果对具有检查约束的域强制执行长度限制,则可以自由更改它(当然,使用域的所有列都必须符合新条件。对于我知道的所有内容,您无法轻松更改基础数据类型。


使用像您这样的现有设置,您还可以转储数据库,使用全局搜索和放大器来破解转储。替换以交换所有出现的域(只要使用域的所有字段都满足条件)并重新加载转储。