是否有改变域类型并将类型更改为新类型?我有一个列使用具有VARCHAR(25)类型的域,并希望将长度增加到150.
答案 0 :(得分:1)
创建新域,更改所有表并删除旧域。
答案 1 :(得分:1)
一种方法是
那只是一个草图。在真正的数据库中尝试之前在沙盒中练习。
答案 2 :(得分:1)
这是不可能的,但你可以使它成为可能。
就目前情况而言,你将varchar(25)作为域名别名。
varchar(25),varchar(50),varchar和text都以相同的方式存储在Postgres中。唯一的区别是长度检查,这增加了前两个的开销。
现在,您无法更改域的类型,但您可以更改其约束 - 更好的是,将约束放在域上是允许在不需要重写表的情况下更改它们的“技巧”之一。
这样,如果您有第二个想法,并决定将最大长度更改为40或60或更改为25,那么您将能够在没有表格重写的情况下这样做。
答案 3 :(得分:0)
不能。而且,除非您真的必须-否则(请参阅下面的警告)。
您想要做的是:
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;
警告-这是唯一可行的方法,因为我们正在扩展域,以便每个值仍然有效。例如,如果您想使值更短,则面临着使表中的值变为无效的风险。在这种情况下,您需要先使用一些迁移脚本来修复此值