【发布时间】:2011-06-12 20:20:44
【问题描述】:
有没有办法改变域类型并将类型更改为新类型?我有一个使用具有 VARCHAR(25) 类型的域的列,并且希望将长度增加到 150。
【问题讨论】:
-
你可以在DBA.stackexchange.com 上提问。
标签: postgresql types constraints alter-table
有没有办法改变域类型并将类型更改为新类型?我有一个使用具有 VARCHAR(25) 类型的域的列,并且希望将长度增加到 150。
【问题讨论】:
标签: postgresql types constraints alter-table
创建一个新域,用新域更改所有表并删除旧域。
【讨论】:
你不能。除非你真的必须 - 你不应该(见下面的警告)。
你想做的是:
ALTER DOMAIN domain_name RENAME TO doman_name_depricated;
CREATE DOMAIN doman_name AS VARCHAR(150);
ALTER TABLE table_name ALTER COLUMN column_name SET DATA TYPE domain_name;
警告 - 这只有在我们扩大域以使每个值仍然有效时才有可能。例如,如果您想缩短值,您将面临表中的值变得无效的风险。在这种情况下,您需要一些迁移脚本来修复此值之前
【讨论】:
这是不可能的,但你可以让它成为可能。
就目前而言,您将 varchar(25) 别名为您的域。
varchar(25)、varchar(50)、varchar 和 text 在 Postgres 中的存储方式相同。唯一的区别是长度检查,它增加了前两个的开销。
现在,您无法更改域的类型,但可以更改其约束 - 更好的是,将约束置于域上是无需重写表即可更改它们的“技巧”之一。
这样,如果您重新考虑并决定将最大长度更改为 40 或 60 或恢复为 25,则无需重写表即可。
【讨论】:
\d 有效)。
一种方法是
这只是一个草图。在您的真实数据库上尝试之前先在沙盒中练习。
【讨论】: