问题: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";

引号很重要。

Logo

PostgreSQL社区为您提供最前沿的新闻资讯和知识内容

更多推荐