我想把列类型从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来完全替换整数,并且如果没有对这些整数的现有外键引用,那么可以使用假强制转换来实际生成新值.

Do not run this没有数据备份.它永久性地抛弃了colA年前的旧价值观.

ALTER TABLE tableA ALTER COLUMN colA SET DATA TYPE UUID USING (uuid_generate_v4());

更好的方法通常是在uuid列中添加add个,然后修复所有外键引用以指向它,最后删除原始列.

您需要安装UUID模块:

CREATE EXTENSION "uuid-ossp";

这些引语很重要.

Postgresql相关问答推荐

在Postgres中如何连接具有相同名称列的表并更改列名称?

求和直到达到一个值 postgresql

postgres vacuum 是否改进了我的查询计划

使用正则表达式计算 SQL 查询中 WHERE 过滤器的数量

如何获得区间的绝对值

PostgreSQL - 我应该如何使用 first_value()?

在 PostgreSQL 中返回插入的行

Postgresql JSONB 来了.现在用什么?Hstore?JSON?EAV?

timezone date_trunc 函数

Postgres 表中列的顺序会影响性能吗?

使用 pg_dump 和 psql -U postgres db_name < ... 移动数据库会导致ERROR: relation "table_name" does not exist

在 Spring Boot 应用程序中禁用表重新创建

返回 array_agg() 中的第一个元素

获取全文搜索配置语言的完整列表

psql 致命角色不存在

Windows 上的 GeoDjango:Could not find the GDAL library" / "OSError: [WinError 126] The specified module could not be found

如何将 PostgreSQL 查询输出导出到 csv 文件

使用 Homebrew 安装 icu4c 版本 63

由于不支持身份验证类型 10,无法连接到 Postgres DB

postgres LISTEN/NOTIFY rails