如何通过knex迁移修改PostgreSQL数据库表的列数据类型
PostgreSQL INTEGER类型列转JSONB类型操作步骤
操作前先备份目标表数据,避免转换错误导致数据丢失,备份命令如下:
CREATE TABLE 你的表名_bak AS SELECT * FROM 你的表名;执行类型修改语句,由于PostgreSQL无INTEGER到JSONB的默认隐式转换,需要通过
USING子句指定转换规则:- 若需将原有整数值直接作为JSONB数值类型存储,执行以下命令:
ALTER TABLE 你的表名 ALTER COLUMN 你的列名 TYPE JSONB USING to_jsonb(你的列名); - 若需将原有整数值转为JSONB字符串类型存储(即原有数值
123转为"123"),执行以下命令:ALTER TABLE 你的表名 ALTER COLUMN 你的列名 TYPE JSONB USING to_jsonb(你的列名::TEXT);
- 若需将原有整数值直接作为JSONB数值类型存储,执行以下命令:
转换完成后可执行以下命令验证类型是否修改成功:
SELECT pg_typeof(你的列名) FROM 你的表名 LIMIT 1;
注意事项
- 若表数据量较大,修改类型操作会持有表锁,建议在业务低峰期执行
- 若目标列存在索引,类型修改后原有索引会失效,需重新创建适配JSONB类型的索引
- 若目标列存在外键、特殊校验约束,需先删除对应约束后再修改类型,后续按需重新添加约束
内容的提问来源于stack exchange,提问作者Manish Rana
相关产品推荐
相关产品推荐

