Postgresql 将列类型从 int 更改为 UUID
·
问题:Postgresql 将列类型从 int 更改为 UUID
我想将列类型从int更改为uuid。我正在使用以下语句
ALTER TABLE tableA ALTER COLUMN colA SET DATA TYPE UUID;
但我收到错误消息
ERROR: column "colA" cannot be cast automatically to type uuid
HINT: Specify a USING expression to perform the conversion.
我很困惑如何使用USING进行演员表。
解答
您不能只将 int4 转换为 uuid;这将是一个无效的 uuid,只设置了 32 位,高 96 位为零。
如果要生成新的 UUID 来完全替换整数,并且如果没有对这些整数的现有外键引用,则可以使用实际生成新值的假转换。
请勿在未备份数据的情况下运行此。它会永久丢弃colA中的旧值。
ALTER TABLE tableA ALTER COLUMN colA SET DATA TYPE UUID USING (uuid_generate_v4());
更好的方法通常是添加一个 uuid 列,然后修复任何指向它的外键引用,最后删除原始列。
您需要安装 UUID 模块:
CREATE EXTENSION "uuid-ossp";
引号很重要。
更多推荐
所有评论(0)