如何为PostgreSQL现有表的指定列应用已定义的Domain
把自定义Domain应用到已有表的列上
嘿,要把你定义的dataDomain应用到public.data表的name列上,用PostgreSQL的ALTER TABLE语句就能轻松搞定,具体命令如下:
ALTER TABLE public.data ALTER COLUMN name TYPE dataDomain;
几点重要说明:
- 因为你的
dataDomain是基于TEXT类型定义的,而原列name本身就是TEXT类型,所以类型转换是完全兼容的,直接执行上面的命令即可。执行完成后,name列会自动继承dataDomain里的CHECK约束,也就是只能存储joe、john、jack这三个值。 - 执行前务必检查现有数据:如果表中
name列已经存在不符合约束的值(比如jane),这个修改操作会直接失败。你可以先运行下面的查询排查不符合要求的数据:
如果有结果返回,先把这些不符合的数据修正(比如更新为允许的值或者删除),再执行修改列类型的命令。SELECT id, name FROM public.data WHERE name NOT IN ('joe', 'john', 'jack');
额外小提示:
如果之后你想移除这个Domain约束,把列改回原来的TEXT类型,用下面的命令就行:
ALTER TABLE public.data ALTER COLUMN name TYPE text;
内容的提问来源于stack exchange,提问作者Flammy
相关产品推荐
相关产品推荐

